사용할 수 :
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>
왜 당신은 UI 통해 조작된다 처음부터 절차 코드? –
@HighCore 아직 WPF에 능숙하지 않습니다. 하지만 개체의 가치에 따라 변환기를 만들 계획이었습니다. – Tokfrans
이 경계는 ListviewItemtempate btw 안에 있습니다. – Tokfrans