我有一個WPF應用程序(至今)有兩種顯示模式,regularmode和widgetmode。如何動態修改WPF XAML中的圖像源
我正在使用棱鏡6與MVVM設計模式。
MainWindowViewModel知道顯示模式。
如預期的那樣,ToolBarView具有按鈕的工具欄,根據視圖的模式,按鈕應動態地更改爲不同的圖像。如果模式爲WidgetMode,則切換到名稱相同但帶有'_w'的圖像。因此,而不是「image.png」,它是「image_w.png」。
我想要做的是在ToolBarView中創建一個字符串,根據模式更新爲String.Empty或「_w」。我還希望圖像根文件夾是一個全局字符串,而不是一個硬編碼的字符串,所以我已經在app.xaml中定義了它。
<Application.Resources>
<sys:String x:Key="ImageURIRoot">/MyApp;component/media/images/</sys:String>
</Application.Resources>
然後在我的toolbarview(一個用戶控件),我這樣做:
<UserControl.Resources>
<converters:StringToSourceConverter x:Key="strToSrcConvert"/>
<sys:String x:Key="BtnImgSuffix">_w</sys:String>
.
.
.
</UserControl.Resources>
注意,該字符串是硬編碼;最終,我會根據窗口模式動態更改它。
然後我把按鈕放在一個列表框
<ListBoxItem Style="{StaticResource MainButton_Container}">
<Button Command="{Binding ButtonActionDelegateCommand}" Style="{StaticResource Main_Button}">
<Image Source="{Binding Source={StaticResource ImageURIRoot}, Converter={StaticResource strToSrcConvert}, ConverterParameter='{}{0}button.png'}" />
</Button>
</ListBoxItem>
轉換代碼:
public class StringToSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (parameter is string)
{
return string.Format(parameter.ToString(), value);
}
return null;
}
public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
使作品。但我想要的是使ConverterParameter等於「{} {0}按鈕{1} .png」,其中{0}是URI Root,{1}是後綴。但我無法弄清楚如何去做。我知道這很簡單,但我不能把手指放在上面!
請幫忙!
使用MultiBinding。 – Clemens