2017-01-16 5 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> 

리소스 키 값은 viewmodel의 목록에서 가져옵니다. 이제 아래에서 달성하고 싶습니다.

<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

이 정적 리소스도 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