2017-01-16 7 views
0

私はリソースで定義された視覚的なブラシのリストを持っています。以下のように。リソース名をバックグラウンドプロパティにバインドするにはどうすればいいですか?

<Window.Resources> 
    <VisualBrush x:Key="Img"> 
     <VisualBrush.Visual> 
      <Canvas> 
       <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path3402" Fill="#FFDDE6EE" Data="m 171.33928 338.07648 0 -140.625 234.375 0 234.375 0 0 140.625 0 140.625 -234.375 0 -234.375 0 0 -140.625 z"/>      
      </Canvas> 
     </VisualBrush.Visual> 
    </VisualBrush> 

    <VisualBrush x:Key="Img1"> 
     <VisualBrush.Visual> 
      <Canvas>     
       <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path3396" Fill="#FF6798C8" Data="m 171.33928 338.07648 0 -140.625 234.375 0 234.375 0 0 140.625 0 140.625 -234.375 0 -234.375 0 0 -140.625 z m 75 130.21087 c 0 -0.61571 0.87726 -0.81896 z"/>      
      </Canvas> 
     </VisualBrush.Visual> 
    </VisualBrush> 
</Window.Resources> 

リソースキーの値は、ビューモデルのリストから得られます。 は今、私は以下を達成したいです。

<Border Background="{StaticResource Binding{ResourceName}}"/> 

どのように達成できますか?

+0

これはStaticResourceもDynamicResourceを使用してサポートされていません。独自のカスタムマークアップ拡張を実装することもできます:http://www.c-sharpcorner.com/uploadfile/mamta_m/creating-a-custom-markup-extension-in-wpf/またはコンバータを使用します。 – mm8

+0

ここでどのようにコンバータを使うと便利でしょうか。あなたは説明できますか? – Rudra

+0

私の答えを参照してください。 – mm8

答えて

1

これはStaticResourceもDynamicResourceを使用してサポートされていませんが、あなたはマルチコンバータを使用することができます。

public class ResourceConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (values != null && values.Length == 2) 
     { 
      string resourceKey = values[0].ToString(); 
      Window window = values[1] as Window; 
      if (!string.IsNullOrEmpty(resourceKey) && window != null) 
       return window.Resources[resourceKey] as System.Windows.Media.Brush; 
     } 
     return null; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

使用法:

<Window.Resources> 
    <VisualBrush x:Key="Img1">...</VisualBrush> 
    <VisualBrush x:Key="Img2">...</VisualBrush> 
    <local:ResourceConverter x:Key="ResourceConverter" /> 
</Window.Resources> 
... 
<Border> 
    <Border.Background> 
     <MultiBinding Converter="{StaticResource ResourceConverter}"> 
      <Binding Path="ResourceName" /> 
      <Binding Path="." RelativeSource="{RelativeSource AncestorType=Window}" /> 
     </MultiBinding> 
    </Border.Background> 
    <TextBlock>...</TextBlock> 
</Border> 

public string ResourceName { get; } = "Img1"; 

他のオプションを書くことになり、あなたの独自のカスタムマークアップ拡張機能:http://www.c-sharpcorner.com/uploadfile/mamta_m/creating-a-custom-markup-extension-in-wpf/

+0

詳細な説明をありがとう。これは私の問題を解決します。 – Rudra

関連する問題