问题
<Window x:Class="WpfTutorialSamples.WPF_Application.ResourceSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Window.Resources>
<sys:String x:Key="centralRes">Hello, world!</sys:String>
</Window.Resources>
<StackPanel Margin="10">
<TextBox Name="src" />
<TextBlock Name="dst" Text="{DynamicResource centralRes}" FontSize="56" />
</StackPanel>
</Window>
I am just learning, and was curious if I can bind the string
literal in centralRes
to another control's Text property (like src.Text
), so when it updates, all things bound to it like dst
automatically update.
Almost like a central hub for a piece of info. Is this possible to do?
Example of what I want:
<sys:String x:Key="centralRes" Value="{Binding Text, ElementName=src}">Hello, world!</sys:String>
回答1:
Binding directly to the object (saved in Resources) in this case is not easy if not wanting to say it's impossible. However you can bind the Text
to the Window
and set the Path
to that resource and it works OK:
<TextBox Name="src"
Text="{Binding RelativeSource={RelativeSource AncestorType=Window},
Path=Resources[centralRes],Mode=OneWayToSource,
UpdateSourceTrigger=PropertyChanged}"/>
More about binding directly to the object: When doing like this, the Source
of the Binding
will be assigned to a StaticResource
and the Path
should be .
(otherwise an error saying 2 way binding requires Path or XPath although we set Mode to BindingMode.OneWayToSource). Using DynamicResource
is not possible for a Binding
's Source. After that the code compiles OK but the Binding does nothing. I doubt that the StaticResource
is the problem, however as I said, DynamicResource
cannot be used. Hence we're stuck at binding directly to the object.
回答2:
Use StaticResource instead ie. {StaticResource centralRes}
来源:https://stackoverflow.com/questions/25932736/is-it-possible-to-bind-a-dynamicresource-of-clrstring-to-another-source-instead