Skip to content

Commit 0cd51fc

Browse files
Merge pull request #38 from AndrewKeepCoding/36-add-support-for-attached-properties
Add support for attached properties
2 parents c93ba39 + 560eb49 commit 0cd51fc

File tree

7 files changed

+72
-8
lines changed

7 files changed

+72
-8
lines changed

WinUI3Localizer.SampleApp/ControlsPage.xaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,13 @@
184184
<x:String xml:space="preserve">&lt;Slider l:Uids.Uid="ControlsPage_Slider" /&gt;</x:String>
185185
</local:ExamplePresenter.XamlSampleCode>
186186
</local:ExamplePresenter>
187+
<!-- ToolTip -->
188+
<local:ExamplePresenter HeaderText="ToolTip">
189+
<Button l:Uids.Uid="ControlsPage_ToolTipButton" />
190+
<local:ExamplePresenter.XamlSampleCode>
191+
<x:String xml:space="preserve">&lt;Button l:Uids.Uid="ControlsPage_ToolTipButton" /&gt;</x:String>
192+
</local:ExamplePresenter.XamlSampleCode>
193+
</local:ExamplePresenter>
187194
<!-- ColorPicker -->
188195
<local:ExamplePresenter
189196
HeaderText="ColorPicker"

WinUI3Localizer.SampleApp/Strings/en-US/Resources.resw

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,15 @@
177177
<data name="ControlsPage_ToggleSwitch.OnContent" xml:space="preserve">
178178
<value>Activated</value>
179179
</data>
180+
<data name="ControlsPage_ToolTipButton.Content" xml:space="preserve">
181+
<value>Place the mouse pointer</value>
182+
</data>
183+
<data name="ControlsPage_ToolTipButton.ToolTipService.Placement" xml:space="preserve">
184+
<value>Bottom</value>
185+
</data>
186+
<data name="ControlsPage_ToolTipButton.ToolTipService.ToolTip" xml:space="preserve">
187+
<value>This is a localized ToolTip.</value>
188+
</data>
180189
<data name="en-US" xml:space="preserve">
181190
<value>English</value>
182191
</data>

WinUI3Localizer.SampleApp/Strings/es-ES/Resources.resw

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,15 @@
177177
<data name="ControlsPage_ToggleSwitch.OnContent" xml:space="preserve">
178178
<value>Activado</value>
179179
</data>
180+
<data name="ControlsPage_ToolTipButton.Content" xml:space="preserve">
181+
<value>Coloca el mouse pointer</value>
182+
</data>
183+
<data name="ControlsPage_ToolTipButton.ToolTipService.Placement" xml:space="preserve">
184+
<value>Right</value>
185+
</data>
186+
<data name="ControlsPage_ToolTipButton.ToolTipService.ToolTip" xml:space="preserve">
187+
<value>Esto es un ToolTip localizado.</value>
188+
</data>
180189
<data name="en-US" xml:space="preserve">
181190
<value>English</value>
182191
</data>

WinUI3Localizer.SampleApp/Strings/ja/Resources.resw

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,15 @@
177177
<data name="ControlsPage_ToggleSwitch.OnContent" xml:space="preserve">
178178
<value>有効</value>
179179
</data>
180+
<data name="ControlsPage_ToolTipButton.Content" xml:space="preserve">
181+
<value>マウスポインタを置いてください</value>
182+
</data>
183+
<data name="ControlsPage_ToolTipButton.ToolTipService.Placement" xml:space="preserve">
184+
<value>Top</value>
185+
</data>
186+
<data name="ControlsPage_ToolTipButton.ToolTipService.ToolTip" xml:space="preserve">
187+
<value>これはローカライズされたToolTipです。</value>
188+
</data>
180189
<data name="en-US" xml:space="preserve">
181190
<value>English</value>
182191
</data>

WinUI3Localizer/Localizer.cs

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
using Microsoft.Extensions.Logging;
22
using Microsoft.Extensions.Logging.Abstractions;
33
using Microsoft.UI.Xaml;
4+
using Microsoft.UI.Xaml.Controls.Primitives;
45
using System;
56
using System.Collections.Generic;
67
using System.Linq;
78
using System.Reflection;
89
using System.Threading.Tasks;
10+
using System.Xml.Linq;
911

1012
namespace WinUI3Localizer;
1113

@@ -242,17 +244,46 @@ private static void DependencyObjectsReferences_DependencyObjectRemoved(object?
242244
{
243245
return property;
244246
}
245-
else if (type.GetField(
247+
248+
if (type.GetField(
246249
dependencyPropertyName,
247250
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) is FieldInfo fieldInfo &&
248251
fieldInfo.GetValue(null) is DependencyProperty field)
249252
{
250253
return field;
251254
}
252255

256+
// TODO: This should be done on the building process.
257+
if (dependencyPropertyName.Split(".") is string[] splitResult &&
258+
splitResult.Length is 2)
259+
{
260+
string attachedPropertyClassName = splitResult[0];
261+
IEnumerable<Type> types = GetTypesFromName(attachedPropertyClassName);
262+
263+
string attachedPropertyName = splitResult[1];
264+
IEnumerable<PropertyInfo> attachedProperties = types
265+
.Select(x => x.GetProperty(attachedPropertyName))
266+
.OfType<PropertyInfo>();
267+
268+
foreach (PropertyInfo attachedProperty in attachedProperties)
269+
{
270+
if (attachedProperty.GetValue(null) is DependencyProperty dependencyProperty)
271+
{
272+
return dependencyProperty;
273+
}
274+
}
275+
}
276+
253277
return null;
254278
}
255279

280+
private static IEnumerable<Type> GetTypesFromName(string name)
281+
{
282+
return AppDomain.CurrentDomain.GetAssemblies()
283+
.SelectMany(x => x.GetTypes())
284+
.Where(x => x.Name == name);
285+
}
286+
256287
private async Task LocalizeDependencyObjects()
257288
{
258289
foreach (DependencyObject dependencyObject in await this.dependencyObjectsReferences.GetDependencyObjects())
@@ -280,11 +311,10 @@ private void LocalizeDependencyObject(DependencyObject dependencyObject, Languag
280311
item.DependencyPropertyName) is DependencyProperty dependencyProperty)
281312
{
282313
LocalizeDependencyObjectsWithDependencyProperty(dependencyObject, dependencyProperty, item.Value);
314+
return;
283315
}
284-
else
285-
{
286-
LocalizeDependencyObjectsWithoutDependencyProperty(dependencyObject, item.Value);
287-
}
316+
317+
LocalizeDependencyObjectsWithoutDependencyProperty(dependencyObject, item.Value);
288318
}
289319

290320
private void LocalizeDependencyObjectsWithDependencyProperty(DependencyObject dependencyObject, DependencyProperty dependencyProperty, string value)

WinUI3Localizer/LocalizerBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ private static LanguageDictionary CreateLanguageDictionaryFromStringResourceItem
170170
private static LanguageDictionary.Item CreateLanguageDictionaryItem(StringResourceItem stringResourceItem)
171171
{
172172
string name = stringResourceItem.Name;
173-
(string Uid, string DependencyPropertyName) = name.LastIndexOf(".") is int lastSeparatorIndex && lastSeparatorIndex > 1
174-
? (name[..lastSeparatorIndex], string.Concat(name.AsSpan(lastSeparatorIndex + 1), "Property"))
173+
(string Uid, string DependencyPropertyName) = name.IndexOf(".") is int firstSeparatorIndex && firstSeparatorIndex > 1
174+
? (name[..firstSeparatorIndex], string.Concat(name.AsSpan(firstSeparatorIndex + 1), "Property"))
175175
: (name, string.Empty);
176176
return new LanguageDictionary.Item(
177177
Uid,

WinUI3Localizer/WinUI3Localizer.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
- You/users can add new languages even after deployment
1818
- Use standard Resources.resw
1919
</Description>
20-
<Version>2.0.1</Version>
20+
<Version>2.1.0</Version>
2121
<PackageTags>winui3;winappsdk;localization;localize;language;multilanguage</PackageTags>
2222
<PackageProjectUrl>https://github.com/AndrewKeepCoding/WinUI3Localizer</PackageProjectUrl>
2323
<RepositoryUrl>https://github.com/AndrewKeepCoding/WinUI3Localizer</RepositoryUrl>

0 commit comments

Comments
 (0)