2015-05-22 4 views
4

У меня есть огромная проблема, и я не знаю, что делать. Я пишу клиент на C# WPF. У меня есть 3 элемента в моей форме (текстовое поле, пароль, кнопка). Поэтому я хочу изменить фон кнопки на «активный (изменение изображения)», когда люди заполнят текст текстового поля и пароль. Что-то вроде логина и пароля.Сменить кнопку фона WPF свойство мыши с условиями C#

private void eventhandler(object sender, RoutedEventArgs e) 
    { 
     if (login.Text.Length > 0 && password.Password.Length > 0) 
     { 

      ImageBrush myBrush = new ImageBrush(); 
      myBrush.ImageSource = 
       new BitmapImage(new Uri("pack://application:,,,/Images/Enter Enabled.bmp", UriKind.Absolute)); 
      Enter.Background = myBrush; 

      } 
     else if (login.Text.Length < 1 || password.Password.Length < 1) 
     { 

      ImageBrush myBrush = new ImageBrush(); 
      myBrush.ImageSource = 
       new BitmapImage(new Uri("pack://application:,,,/Images/Enter Disabled.bmp", UriKind.Absolute)); 
      Enter.Background = myBrush; 
     } 
    } 

У меня есть этот код C#. Это работает, но теперь у меня проблема. Когда я наводил курсор на мою кнопку, он меняет фон на «Отключено».

Xaml

<Window x:Class="Test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="250" Width="288" Background="#FF494949"> 
<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}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
         <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="Images/Enter Disabled.bmp"/> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="True"> 
          <Setter Property="Background" TargetName="border"> 
           <Setter.Value> 
            <ImageBrush ImageSource="Images/Enter 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> 
<Grid Margin="0,0,2,-4.478"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="0*"/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Button HorizontalAlignment="Left" Name="Enter" Margin="46,92,0,0" VerticalAlignment="Top" Width="127" Height="27" Grid.Column="1" BorderThickness="0" Style="{DynamicResource ButtonStyle1}"> 
     <Button.Background> 
      <ImageBrush ImageSource="Images/Enter Disabled.bmp"/> 
     </Button.Background> 
    </Button> 
    <TextBox Grid.ColumnSpan="2" Name="login" HorizontalAlignment="Left" Height="23" Margin="53,23,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" TextChanged="eventhandler"/> 
    <PasswordBox Grid.ColumnSpan="2" Name="password" HorizontalAlignment="Left" Margin="53,59,0,0" VerticalAlignment="Top" Width="120" PasswordChanged="eventhandler"/> 

</Grid> 

Я знаю, что это из-за MouseOver кисти изображения, но как я могу заблокировать его или изменить в C# код с теми выше условиях. Testapplication

Я загрузил testapp на ракете. Так что просто заполните текстовое поле и пароль с текстом и кнопкой мыши, и вы увидите, в чем проблема. Спасибо всем вам за ответы и любую помощь

ответ

2

Согласен. Удалить это, если вы не хотите такого поведения:

<Trigger Property="IsMouseOver" Value="True"> 
     <Setter Property="Background" TargetName="border"> 
      <Setter.Value> 
       <ImageBrush ImageSource="Images/Enter Disabled.bmp"/> 
      </Setter.Value> 
     </Setter> 
    <Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/> 
    </Trigger> 
1

Кнопка WPF уже включает эту функциональность. вы можете привязать свойство IsEnabled к вашей кнопке к значению bool в вашей модели представления, а затем определить стиль для enabled, disabled и moseover в ваших стилях xml с использованием визуальных состояний.

Вы найдете исходный код по умолчанию WPF кнопки стилизации здесь: https://msdn.microsoft.com/en-us/library/ms753328(v=vs.110).aspx

Затем вы можете также изменить свойство, связанное с IsEnabled в соответствии с изменениями собственностей на ваших текстовых полях.

+0

ой, кстати Если вы используете реактивные расширения вы можете иметь Enabled/Disabled функциональность, определенную непосредственно в командной-то вроде этого: 'this.SelectAll = новый DelegateCommand (() => this.ApplySelection (this.resultsDataGridViewModel, true), this.CanApplySelection); 'where' SelectAll' привязан к команде кнопки –