2015-06-17 13 views
1

Возможно, этот вопрос задавали 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#. Надеюсь, вы поймете, что мне нужно. Спасибо вам всем за помощь.

+0

См [этот ответ о настройке ImageSource из image] (https://stackoverflow.com/questions/10146269/set-imagesource-of-wpf-image?rq=1) –

+0

Как насчет использования IMultiValueConverter для вашего свойства ImageSource? Вы можете передать ему язык и изображение по умолчанию, а также преобразовать его на основе языка. Кроме того, вам нужно найти сам шаблон и изменить его, что не так просто сделать imo. Если идти по этому пути, я бы предложил переместить ControlTemplate из стиля, поэтому у него есть собственный х: ключ, чтобы было легче найти его из кода. – Rachel

+0

Спасибо, но я не так глубоко в C# wpf. Я думал, что это будет что-то вроде: var myBrush = new ImageBrush(); myBrush.ImageSource = new BitmapImage (новый Uri ("pack: // application: ,,,/English/MainWindow.png", UriKind.Absolute)); mainwindow.Background = myBrush; Но я могу применить это к элементу управления с именем. Итак, чтобы установить разные исходные изображения из C#, это не так просто, как я думал? Благодарим вас за отзыв о IMultiValueConverter. Ребята, я был бы признателен, если кто-нибудь покажет хотя бы наименьший пример кода, как изменить изображения. Большое спасибо за вашу помощь. –

ответ

1

Если вы пытаетесь локализовать свое приложение, вам следует рассмотреть возможность поиска в существующих библиотеках, чтобы помочь вам, например, WPFLocalizationExtension.

Чтобы ответить на ваш вопрос, вы можете определить все ваши изображения как статические свойства или как ресурсы где-то в своем приложении, и назначить их правильным значениям на основе языка. Если вам не нужно поддерживать изменение языка во время работы приложения, статические свойства будут проще настроить.

Просто определить свойства, как это:

internal static class Images 
{ 
    public static Uri CancelMouseOver { get; set; } 
} 

Установите их так:

Images.CancelMouseOver = new Uri("Cancel(english) (Mouseover).bmp", UriKind.Relative); 

Затем используйте их так:

<ImageBrush ImageSource="{x:Static local:Images.CancelMouseOver}"/> 
+0

Ты спас мне жизнь.) Огромное спасибо. Я просто читал о привязках весь день. Но это намного проще и проще. –

 Смежные вопросы

  • Нет связанных вопросов^_^