我正在尝试将 DynamicResource 值绑定(bind)到位于 viewmodel 中的公共(public)属性,然后再对其进行操作。静态资源基本上显示的是图像。任何建议,谢谢。
<Rectangle Width="20" Height="20">
<Rectangle.Fill>
<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_page_number1}" />
</Rectangle.Fill>
</Rectangle>
最佳答案
如果您有固定数量的资源并且想要将枚举转换为资源,那么您可以使用绑定(bind)转换器。像这样的东西:
public enum PossibleValue
{
Value1,
Value2,
Value3,
Value4
}
转换器看起来像:
public class EnumToVisualConverter : IValueConverter
{
public Visual Visual1 { get; set; }
public Visual Visual2 { get; set; }
public Visual Visual3 { get; set; }
public Visual Visual4 { get; set; }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (!(value is PossibleValue))
return null; //Or a some default Visual
PossibleValue val = (PossibleValue)value;
switch (val)
{
case PossibleValue.Value1:
return Visual1;
case PossibleValue.Value2:
return Visual2;
case PossibleValue.Value3:
return Visual3;
default:
return Visual4;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后在资源部分声明转换器:
<l:EnumToVisualConverter x:Key="myConverter"
Visual1="{StaticResource appbar_page_number1}"
Visual2="{StaticResource appbar_page_number2}"
Visual3="{StaticResource appbar_page_number3}"
Visual4="{StaticResource appbar_page_number4}"/>
现在将矩形与 VM 中的属性链接起来(我们称这个属性为 MightyProperty)。
<Rectangle Width="20" Height="20">
<Rectangle.Fill>
<VisualBrush Stretch="Fill" Visual="{Binding MightyProperty, Converter={StaticResource myConverter}}" />
</Rectangle.Fill>
</Rectangle>
这样,每次 MightyProperty 将在您的 View 模型中更改时,转换器将找到适当的视觉并将其发送到 VisualBrush 的 Visual 属性。
当然 MightyProperty 不必是 Enum 类型,它可以是 int 字符串或任何其他类型。您只需调整 Convert 方法中的代码以匹配您的类型。
关于wpf - 从 MVVM 更改 DynamicResource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22999072/