要訪問的資源,你可以使用:
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;
}
}
我個人不喜歡這樣的解決方案是視圖中的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裏面。 – Tokfrans