如何向资源字典添加绑定?
How Can I Add a Binding to a Resource Dictionary?
我的 UserControl
上有多个控件使用相同的可见性绑定:
<UserControl x:Class="Whatever.MyClass"
x:Name ="TheUserControlName"
DataContext="MyUserControlViewModel">
<Label x:Name="MyLabel"
Visibility="{Binding SomeBoolean,
ConverterParameter={StaticResource BooleanToVisibilityConverter},
Converter={StaticResource BooleanValueInverter}}"
Style="{StaticResource LeftLabel}"
Content="Template _Name"
Target="{Binding ElementName=SomeTextBox}" />
</UserControl>
我试图将绑定添加到 UserControl.Resources
词典:
<Binding x:Key="IsCourseVisibilityBinding"
Path="Thing.SomeBoolean"
ConverterParameter="{StaticResource BooleanToVisibilityConverter}"
Converter="{StaticResource BooleanValueInverter}" />
...我得到错误:
A 'Binding' cannot be set on the 'Value' property of type
'DictionaryEntry'. A 'Binding' Can only be set on a
DependencyProperty of a DependencyObject`
...但后来我想到也许我应该在资源字典中放入一个 Visibility
值...但我也无法让它工作。
如何重构可见性绑定,以便我只需定义一次?
你不能。但是您可能想要使用动态资源。在 App.xaml 中创建可见性资源,如下所示:
<Application.Resources>
<ResourceDictionary
<Visibility x:Key="SomeVisibility">Visible</Visibility>
</ResourceDictionary>
</Application.Resources>
从 XAML:
的任何地方绑定到此可见性
<Button Content="Some button" Visibility="{DynamicResource SomeVisibility}"/>
现在要更改此资源的值,您可以从代码的任何位置调用它:
Application.Current.Resources["SomeVisibility"] = Visibility.Collapsed;
编辑:实际上,如果您不希望它们在所有应用程序中都是全局的,您可以为特定用户控制定义动态资源。
我的 UserControl
上有多个控件使用相同的可见性绑定:
<UserControl x:Class="Whatever.MyClass"
x:Name ="TheUserControlName"
DataContext="MyUserControlViewModel">
<Label x:Name="MyLabel"
Visibility="{Binding SomeBoolean,
ConverterParameter={StaticResource BooleanToVisibilityConverter},
Converter={StaticResource BooleanValueInverter}}"
Style="{StaticResource LeftLabel}"
Content="Template _Name"
Target="{Binding ElementName=SomeTextBox}" />
</UserControl>
我试图将绑定添加到 UserControl.Resources
词典:
<Binding x:Key="IsCourseVisibilityBinding"
Path="Thing.SomeBoolean"
ConverterParameter="{StaticResource BooleanToVisibilityConverter}"
Converter="{StaticResource BooleanValueInverter}" />
...我得到错误:
A 'Binding' cannot be set on the 'Value' property of type 'DictionaryEntry'. A 'Binding' Can only be set on a DependencyProperty of a DependencyObject`
...但后来我想到也许我应该在资源字典中放入一个 Visibility
值...但我也无法让它工作。
如何重构可见性绑定,以便我只需定义一次?
你不能。但是您可能想要使用动态资源。在 App.xaml 中创建可见性资源,如下所示:
<Application.Resources>
<ResourceDictionary
<Visibility x:Key="SomeVisibility">Visible</Visibility>
</ResourceDictionary>
</Application.Resources>
从 XAML:
的任何地方绑定到此可见性<Button Content="Some button" Visibility="{DynamicResource SomeVisibility}"/>
现在要更改此资源的值,您可以从代码的任何位置调用它:
Application.Current.Resources["SomeVisibility"] = Visibility.Collapsed;
编辑:实际上,如果您不希望它们在所有应用程序中都是全局的,您可以为特定用户控制定义动态资源。