gpt4 book ai didi

wpf - 使用资源作为转换导致绑定(bind)转换器

转载 作者:行者123 更新时间:2023-12-04 01:45:27 27 4
gpt4 key购买 nike

当我尝试将值转换器从定义的枚举状态绑定(bind)到刷子时,我的 XAML 设计器中出现错误:

未找到“OKStatus”资源。

该应用程序在运行时运行良好,但我无法在设计器中看到我的 GUI。
我的资源在运行时读取的 color.xaml 文件中定义。
所有代码都在同一个命名空间中


我的 XAML:

xmlns:config="clr-命名空间:App.MyNamespace"

<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="c:\Skins\Colors.xaml" />
<ResourceDictionary Source="c:\Skins\Common.xaml" />
</ResourceDictionary.MergedDictionaries>
<config:StatusConverter x:Key="StateConverter" />
<config:BoolConverter x:Key="BoolConverter" />
<config:BooleanConverter x:Key="BooleanConverter" />
</ResourceDictionary>
</UserControl.Resources>



地位

我的转换器:
[ValueConversion(typeof(bool), typeof(Brush))]
public class BoolConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
bool state = (bool)value;

FrameworkElement FrameElem = new FrameworkElement();

if (state == true)
return (FrameElem.FindResource("OKStatus") as Brush);
else
return (FrameElem.FindResource("ErrorStatus") as Brush);
}

public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return null;
}
}

在这段代码中,我猜 frameElem 不会知道我定义的资源,所以我需要一种方法来在设计期间访问我的资源。
这可能吗?

最佳答案

正如我从 TechNet Wiki 了解到的,有必要使用 MultiValue Converter 和 MultiValueBinding 来通过 UserControl 获取正确的注册转换器和正确的 FrameworkElement。

XAML 示例:

<TextBlock x:Name="tb1" Margin="20">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource MyConverter}">
<Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>
<Binding Path="MyValue"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>

然后转换器声明可以看起来:
public class MyConverter : IMultiValueConverter
{
FrameworkElement myControl;
object theValue;

public object Convert(object[] values, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
myControl = values[0] as FrameworkElement;
theValue = values[1];

return myControl.FindResource(">>resource u need<<");
}

public object[] ConvertBack(object value, System.Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
.....
}
}

详细解释是:
https://social.technet.microsoft.com/wiki/contents/articles/12423.wpfhowto-pass-and-use-a-control-in-it-s-own-valueconverter-for-convertconvertback.aspx

关于wpf - 使用资源作为转换导致绑定(bind)转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201825/

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