2017-06-13 82 views
0

我有我的xaml图像。像这些...我想改变背后的代码图像源,如主题

<Image Name="ImageTekSayfa" Source="Resources/Dark/teksayfa.png" Margin="2,0" MouseLeftButtonUp="TekSayfa_Clicked"/> 
<Image Name="ImageFavorites" Source="Resources/Dark/favorites.png" Margin="2,0" MouseLeftButtonUp="FavoritesClick"/> 
<Image Name="ImageSoruModu" Source="Resources/Dark/sorumodu.png" Margin="2,0" MouseLeftButtonUp="SoruModu_Clicked"/> 
<Image Name="ImagePerde" Source="Resources/Dark/tahta.png" Margin="2,0" MouseLeftButtonUp="PerdeClicked"/> 
<Image Name="ImagePen" Source="Resources/Dark/kalem.png" Margin="2,0" MouseLeftButtonUp="DrawingClicked"/> 
<Image Name="ImageEraser" Source="Resources/Dark/silgi.png" Margin="2,0" MouseLeftButtonUp="EraserClicked"/> 

而我想写这样的我的ImageSources和更改我的代码端的所有源代码路径。像这样:

<Image Name="ImageTekSayfa" Source="Resources/{THEME_NAME}/teksayfa.png" Margin="2,0" MouseLeftButtonUp="TekSayfa_Clicked"/> 

public String THEME_NAME="dark"; 

if(currentTheme="ligth") 
THEME_NAME="light"; 

等。

回答

1

两种可能的方法:

  1. ValueConverter - 存储每个“主题模板”源作为一个资源 字典中的字符串,并结合图片来源使用正确填充所需Uri的IValueConverter的自定义实现:

    <Image Name="ImageTekSayfa" Source="{Binding Source={StaticResource teksayfa}, Converter={StaticResource themeConverter}}" Margin="2,0" MouseLeftButtonUp="TekSayfa_Clicked"/> 
    
  2. 自定义XAML行为 - 创建一个自定义的行为,可以在“主题模板”源转换成所需的URI:

    <Image Name="ImageTekSayfa" Margin="2,0" MouseLeftButtonUp="TekSayfa_Clicked"> 
        <i:Interaction.Behaviors> 
         <bhv:ThemeImageSourceBehavior Source="Resources/{THEME_NAME}/teksayfa.png" /> 
        </i:Interaction.Behaviors> 
    </Image> 
    
+0

确定。我是用IValueConverter做的。 但我无法更改窗体创建后的图像。 – wikiCan

+0

如何在更改主题名称后刷新表单? 我无法重新加载图像。所以一切都是静态的。 – wikiCan

+0

您是否在资源字典中设置资源? – Eric