2014-02-07 3 views
2

런타임 중에 테두리 시각적 브러시를 변경하고 시각을 Mahapps.Metro 아이콘으로 설정하는 방법을 찾으려고합니다. 기본적으로Mahapps.Metro-icons through code

<Border Height="24" Width="24" Margin="12,2,0,12" Background="#585858"> 
         <Border.OpacityMask> 
          <VisualBrush Visual="{StaticResource appbar_star}" Stretch="Fill" /> 
         </Border.OpacityMask> 
</Border> 

내가 비주얼은 "정적 리소스의 appbar_star" 의해야하지만 어떻게 내가 더이

Border.Opacitymask = VisualBrush() { Visual = (Visual)ICONNAME }; 

을하지 않을 것이다 : 여기

국경이 XAML에서의 모습입니다 런타임 중에 아이콘에 액세스하는 방법. 어떤 아이디어? 리소스에 액세스 할 수

+0

왜 당신은 UI 통해 조작된다 처음부터 절차 코드? –

+0

@HighCore 아직 WPF에 능숙하지 않습니다. 하지만 개체의 가치에 따라 변환기를 만들 계획이었습니다. – Tokfrans

+0

이 경계는 ListviewItemtempate btw 안에 있습니다. – Tokfrans

답변

0

사용할 수 :

var resource = System.Windows.Application.Current.FindResource(key); 

당신은 앞으로 단계를 가서 자원 자원 키를 매핑합니다 변환기를 만들 수 있습니다,이 같은 XAML을 달성하기 :

<VisualBrush Visual="{Binding IconKey,Converter={local:KeyToResourceConverter}}" /> 

당신이 할 수있는 다음과 같은 변환기를 만드십시오.

public class KeyToResourceConverter : MarkupExtension, IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return System.Windows.Application.Current.FindResource(value as string); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return this; 
    } 
} 

제가 개인적으로 좋아하지 않는 솔루션 보기 관련 키를 통한 View에 대한 ViewModel의 간접적 인 종속성입니다. 비주얼 스타일을 변경하려면 ViewModel을 변경해야합니다.

당신은, DataTemplates을 사용하여 다음 설정을 고려하는 것이 가능합니다 다음 모드를 클래스를 만들 수있는 경우 :

뷰 모델을 :

interface IMode { } 

class FirstMode:IMode { } 

class SecondMode : IMode { } 

class ThirdMode : IMode { } 

class ViewModel 
{ 
    public IMode Mode { get; private set; } 
} 

보기 :

<DataTemplate DataType="{x:Type local:FirstMode}"> 
    <Border> 
     <Border.OpacityMask> 
      <VisualBrush Visual="{StaticResource appbar_star}" Stretch="Fill" /> 
     </Border.OpacityMask> 
    </Border> 
</DataTemplate> 
<DataTemplate DataType="{x:Type local:SecondMode}"> 
    <Border> 
     <Border.OpacityMask> 
      <VisualBrush Visual="{StaticResource appbar_control_stop}" Stretch="Fill" /> 
     </Border.OpacityMask> 
    </Border> 
</DataTemplate> 
<DataTemplate DataType="{x:Type local:ThirdMode}"> 
    <Border> 
     <Border.OpacityMask> 
      <VisualBrush Visual="{StaticResource appbar_control_pause}" Stretch="Fill" /> 
     </Border.OpacityMask> 
    </Border> 
</DataTemplate> 
<DataTemplate DataType="{x:Type local:ViewModel}"> 
    <ContentControl Content="{Binding Mode}"/> 
</DataTemplate>