Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想改变图像源代码的背后,像主题_C#_Wpf - Fatal编程技术网

C# 我想改变图像源代码的背后,像主题

C# 我想改变图像源代码的背后,像主题,c#,wpf,C#,Wpf,我的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="FavoritesC

我的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";

公共字符串主题_NAME=“深色”;
if(currentTheme=“ligth”)
THEME_NAME=“light”;
等等

两种可能的方法:

  • ValueConverter-将每个“主题模板化”源作为字符串存储在资源中 使用正确填充所需Uri的IValueConverter的自定义实现对图像源进行字典和绑定:

    <Image Name="ImageTekSayfa" Source="{Binding Source={StaticResource teksayfa}, Converter={StaticResource themeConverter}}" Margin="2,0" MouseLeftButtonUp="TekSayfa_Clicked"/>
    
    <Image Name="ImageTekSayfa" Margin="2,0" MouseLeftButtonUp="TekSayfa_Clicked">
        <i:Interaction.Behaviors>
            <bhv:ThemeImageSourceBehavior Source="Resources/{THEME_NAME}/teksayfa.png" />
        </i:Interaction.Behaviors>
    </Image>
    
    
    
  • 自定义XAML行为-创建一个自定义行为,可以将“主题模板化”源转换为所需的Uri:

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

  • 好啊我是用IValueConverter做的。但我不能在表单创建后更改图像。在更改主题名称后如何刷新表单?我无法重新加载图像。所以一切都是静态的。你在资源字典中设置了资源吗?是的。我在资源字典中设置了资源。但是没有任何影响。当窗体创建时指定的图像,如果我设置主题值,则不会发生任何更改。