Возможно, этот вопрос задавали 100 раз, но можете ли вы помочь, пожалуйста, я искал везде, но не могу найти нормальный ответ. Я получил такой XAMLChange ImageBrush Imagesource programmaticaly с условиями (WPF)
<Window x:Class="Imagebind.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Background="#FF3F3B51">
<Window.Resources>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle">
<Setter.Value>
<Style>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="2" SnapsToDevicePixels="True" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="#FFDDDDDD"/>
<Setter Property="BorderBrush" Value="#FF707070"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">
<Border.Background>
<ImageBrush ImageSource="Cancel.bmp"/>
</Border.Background>
<ContentPresenter x:Name="contentPresenter" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsDefaulted" Value="True">
<Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="border">
<Setter.Value>
<ImageBrush ImageSource="Cancel (Mouseover).bmp"/>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" TargetName="border" Value="#FFDDDDDD">
</Setter>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="border">
<Setter.Value>
<ImageBrush ImageSource="Cancel (Pressed).bmp"/>
</Setter.Value>
</Setter>
<Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/>
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="True">
<Setter Property="Background" TargetName="border" Value="#FFBCDDEE"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FF245A83"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
<Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Button Content="" HorizontalAlignment="Left" Margin="174,226,0,0" VerticalAlignment="Top" Width="161" Height="24" Style="{DynamicResource ButtonStyle1}"/>
И таких C# код
using System.Windows;
namespace Imagebind
{
public partial class MainWindow : Window
{
private string language;
public MainWindow()
{
string language = "english";
InitializeComponent();
if (language == "english")
{
/* Here I need to change Imagesource of ImageBrush of 3 state buttons programmaticaly
For example this Cancel (Mouseover).bmp for Cancel(english) (Mouseover).bmp
*/
}
}
}
}
Так все, что я хотел, что если пользователь имеет различные языки все изображения в интерфейсе будет на языке, который я выставиться условия , Поэтому мне нужно изменить все изображения кнопок во всех состояниях на новые в коде C#. Надеюсь, вы поймете, что мне нужно. Спасибо вам всем за помощь.
См [этот ответ о настройке ImageSource из image] (https://stackoverflow.com/questions/10146269/set-imagesource-of-wpf-image?rq=1) –
Как насчет использования IMultiValueConverter для вашего свойства ImageSource? Вы можете передать ему язык и изображение по умолчанию, а также преобразовать его на основе языка. Кроме того, вам нужно найти сам шаблон и изменить его, что не так просто сделать imo. Если идти по этому пути, я бы предложил переместить ControlTemplate из стиля, поэтому у него есть собственный х: ключ, чтобы было легче найти его из кода. – Rachel
Спасибо, но я не так глубоко в C# wpf. Я думал, что это будет что-то вроде: var myBrush = new ImageBrush(); myBrush.ImageSource = new BitmapImage (новый Uri ("pack: // application: ,,,/English/MainWindow.png", UriKind.Absolute)); mainwindow.Background = myBrush; Но я могу применить это к элементу управления с именем. Итак, чтобы установить разные исходные изображения из C#, это не так просто, как я думал? Благодарим вас за отзыв о IMultiValueConverter. Ребята, я был бы признателен, если кто-нибудь покажет хотя бы наименьший пример кода, как изменить изображения. Большое спасибо за вашу помощь. –