gpt4 book ai didi

wpf - 从 MVVM 更改 DynamicResource

转载 作者:行者123 更新时间:2023-12-03 10:28:21 28 4
gpt4 key购买 nike

我正在尝试将 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com