作为变量的Xaml ResourceKey不起作用
本文关键字:ResourceKey 不起作用 Xaml 变量 | 更新日期: 2023-09-27 18:12:48
我正在使用一个组合框(WPF 4.0)来显示编辑器应用程序的用户定义的段落样式。这个组合框有两列:
(1)段落样式名称
(2)文本"abcABC123",在某些属性中应该根据第一列的段落样式进行格式化
(1)正在工作,(2)不是因为_ResourceKey_background, _ResourceKey_foreground和_ResourceKey_fontFamily没有ResourceKeys而是包含ResourceKeys的变量。我怎么解决这个问题?
_NameInternal, _NameUI, _ResourceKey_background, _ResourceKey_foreground和_ResourceKey_fontFamily是公共属性用户定义的段落样式类的。
<ComboBox Name="_cbStylesPara" SelectedValuePath="_NameInternal"
ItemsSource="{Binding Source={StaticResource _collectionViewSource_stylesPara}}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Text="{Binding _NameUI}" VerticalAlignment="Center" />
<TextBlock Grid.Column="1" Text="abcABC123" Margin="3,0,0,0" VerticalAlignment="Center"
Background="{DynamicResource _ResourceKey_background}"
Foreground="{DynamicResource _ResourceKey_foreground}"
FontFamily="{DynamicResource _ResourceKey_fontFamily}" />
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
就像你说的资源是在App资源下声明的,你能做的就是创建一个IValueConverter并从它的Convert方法返回资源值。
public class ResouceLookupConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return App.Current.TryFindResource(value);
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return Binding.DoNothing;
}
}
XAML :
<ComboBox>
<ComboBox.Resources>
<local:ResouceLookupConverter x:Key="ResouceLookupConverter"/>
</ComboBox.Resources>
......
<TextBlock Grid.Column="1" Text="abcABC123" Margin="3,0,0,0"
VerticalAlignment="Center"
Background="{Binding _ResourceKey_background,
Converter={StaticResource ResouceLookupConverter}}"
Foreground="{Binding _ResourceKey_foreground,
Converter={StaticResource ResouceLookupConverter}}"
FontFamily="{Binding _ResourceKey_fontFamily,
Converter={StaticResource ResouceLookupConverter}}" />
</ComboBox>
注意:当然,您必须在XAML设置中定义本地命名空间为声明Converter的命名空间