Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用转换器从字符串到ResourceDictionary中画布对象的WPF绑定_C#_Wpf_Canvas - Fatal编程技术网

C# 使用转换器从字符串到ResourceDictionary中画布对象的WPF绑定

C# 使用转换器从字符串到ResourceDictionary中画布对象的WPF绑定,c#,wpf,canvas,C#,Wpf,Canvas,我有一个ResourceDictionary,由用路径绘制的图标/画布对象组成。My ViewModel包含一个字符串属性(IconName),该属性包含一个与ResourceDictionary中的一个条目匹配的字符串。我开发了一个多重绑定(IMultiValueConverter),它接受字符串和一个FrameworkElement并执行资源查找,返回与名称匹配的资源。在谈到这一点之前,我明确地用以下几点打断了我的观点: <Rectangle Width="10" Height="10

我有一个ResourceDictionary,由用路径绘制的图标/画布对象组成。My ViewModel包含一个字符串属性(IconName),该属性包含一个与ResourceDictionary中的一个条目匹配的字符串。我开发了一个多重绑定(IMultiValueConverter),它接受字符串和一个FrameworkElement并执行资源查找,返回与名称匹配的资源。在谈到这一点之前,我明确地用以下几点打断了我的观点:

<Rectangle Width="10" Height="10" Margin="0,0,10,0">
   <Rectangle.Fill>
       <VisualBrush Stretch="Fill" Visual="{StaticResource defalt_icon}" />
   </Rectangle.Fill>
</Rectangle>
你知道为什么画布没有出现吗

<Rectangle Width="10" Height="10" Margin="0,0,10,0">
    <Rectangle.Fill>
        <VisualBrush Stretch="Fill">
            <VisualBrush.Visual>
                <MultiBinding Converter="{StaticResource IconNameConverter}">
                    <MultiBinding.Bindings>
                        <Binding RelativeSource="{RelativeSource AncestorType=FrameworkElement}"/>
                        <Binding Path="IconName"/>
                    </MultiBinding.Bindings>
                </MultiBinding>
            </VisualBrush.Visual>
        </VisualBrush>
    </Rectangle.Fill>
</Rectangle>
public class IconNameConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        FrameworkElement targetElement = values[0] as FrameworkElement;
        string iconName = values[1] as string;

        if (iconName == null)
            return null;

        FrameworkElement newIcon = (FrameworkElement)targetElement.TryFindResource(iconName);

        if (newIcon == null)
            newIcon = (FrameworkElement)targetElement.TryFindResource("appbar_page_question");

        return newIcon;
    }

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