私は、(これまでの)2つの表示モード、通常モードとウィジェットモードを持つWPFアプリケーションを持っています。WPF XAMLでイメージソースを動的に変更する方法
MVVMデザインパターンのPrism 6を使用しています。
MainWindowViewModelは表示モードを認識します。
ToolBarViewは、期待どおりにボタンのツールバーを持っており、ボタンはビューのモードに応じて動的に異なるイメージに変更されます。モードがWidgetModeの場合、同じ名前で '_w'が追加されたイメージに切り替わります。だから "image.png"の代わりに "image_w.png"です。
私がしたいのは、モードに応じて、String.Emptyまたは "_w"に更新されるToolBarViewの文字列を作成することです。また、画像のルートフォルダをハードコードされた文字列ではなくグローバル文字列にしたいので、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>
注意を。最終的には、ウィンドウモードに基づいて動的に変更します。
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;
}
}
だから作品:
は、私は、リストボックスに
<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>
コンバーターコードをボタンを置きます。しかし、私が望むのは、ConverterParameterを{{} {0}ボタン{1} .png "とすることです。{0}はURIルート、{1}は接尾辞です。しかし、私はそれを行う方法を理解することはできません。私はそれが簡単だと知っていますが、私はそれに私の指を置くことはできません!
助けてください!
マルチバインディングを使用します。 – Clemens