2013-06-18 50 views
6

Trong ứng dụng cửa sổ WPF của tôi, khi tôi di chuột qua nút của tôi, hình nền trên nút biến mất và nút xuất hiện như thể nó không có bất kỳ hình ảnh nào. Những gì tôi muốn là, khi con chuột vào nút, hoặc khi nút được nhấp, hình ảnh vẫn nên được hiển thị trên nút, nó không nên biến mất.hình nền trên một nút biến mất trên chuột qua

Vui lòng trợ giúp.

Cảm ơn

+1

Bạn có bất cứ EventTriggers hoặc mã đằng sau đó có thể thay đổi hình ảnh? –

+0

Không. Hình ảnh trên nút sẽ không thay đổi từ bất kỳ đâu. Tôi đang chỉ định hình ảnh trong Xaml vào thời gian thiết kế. Nhưng, nếu tôi phải thay đổi hình ảnh trên bộ kích hoạt thì không có vấn đề gì, tôi cũng sẽ làm điều đó. – WAQ

+0

Bạn có thể đăng mã của mình không? Tạo nút và nút kiểu. – Sonhja

Trả lời

8

Điều gì đang xảy ra với bạn là điều bình thường. Khi bạn tạo một nút, nó sẽ sử dụng các thuộc tính mặc định của nó trong trường hợp bạn không thay đổi/ghi đè chúng.

Trong trường hợp này, khi bạn tạo nút, bạn đang ghi đè thuộc tính Background nhưng chỉ cho trạng thái bình thường của nút. Nếu bạn muốn nền để thay đổi cũng khi lơ lửng, bạn nên nói cho nút để làm như vậy.

Đối với mục đích này, tôi đề nghị bạn để ghi đè lên nút Template sử dụng phong cách, như thế này:

<Window x:Class="ButtonTest.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"> 
<Window.Resources> 
    <ImageBrush x:Key="ButtonImage" ImageSource="/ButtonTest;component/Resources/ok.png"></ImageBrush> 
    <Style TargetType="Button"> 
     <Setter Property="Background" Value="{StaticResource ButtonImage}"></Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> 
         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
        Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
        SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Foreground" Value="Blue" /> 
          <Setter Property="Cursor" Value="Hand" /> 
          <!-- If we don't tell the background to change on hover, it will remain the same --> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="84,75,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> 
</Grid> 
</Window> 

Trong trường hợp này, phong cách này sẽ được áp dụng cho tất cả các nút của bạn. Bạn có thể chỉ định nút đó để áp dụng phong cách bằng cách thêm một x:Key để phong cách của bạn và sau đó xác định nó trong nút của bạn:

<Style TargetType="Button" x:Key="ButtonStyled"> 

..... 

<Button Style="{StaticResource ButtonStyled}" Content="Button" Height="23" HorizontalAlignment="Left" Margin="84,75,0,0" Name="button1" VerticalAlignment="Top" Width="75" /> 
+0

Tôi đã sử dụng mã bạn đã cung cấp. Làm việc tuyệt vời nếu tôi không cho nó x: key = "ButtonStyled". Tất cả các nút đều có hành vi theo kiểu. Nhưng khi tôi cung cấp nút yêu cầu Style = "ButtonStyled", tôi nhận được ngoại lệ cho biết "Đặt thuộc tính" System.Windows.FrameworkElement.Style 'đã ném ngoại lệ ". Bất kỳ ý tưởng về điều này? – WAQ

+1

@WasimQadir phải là 'Kiểu =" {StaticResource ButtonStyled} "' – lisp

+0

@lisp Rất cám ơn các bạn. Nó đã làm việc :) – WAQ

2

Tôi là một chút muộn để đảng, nhưng tất cả các bạn đang làm điều này quá phức tạp.

Tất cả bạn phải làm là thiết lập các nội dung và Bối cảnh:

<Button x:Name="YouTubeButton" Width="148" Height="76" BorderBrush="Black" 
    Click="YouTubeButton_Click" Margin="112,20,112,0" 
    MouseEnter="Button_OnMouseEnter" MouseLeave="Button_MouseLeave"> 
    <Button.Content> 
     <Image Source="Images/YouTube.png" /> 
    </Button.Content> 
    <Button.Background> 
     <ImageBrush ImageSource="Images/YouTube.png" /> 
    </Button.Background> 
</Button> 

(Optional - makes the mouse behave like a hand clicking a link) 
#region Button_MouseLeave(object sender, MouseEventArgs e) 
/// <summary> 
/// This event is fired when the mouse leaves a button 
/// </summary> 
private void Button_MouseLeave(object sender, MouseEventArgs e) 
{ 
    // Change the cursor back to default 
    Cursor = null; 
} 
#endregion 

#region Button_OnMouseEnter(object sender, EventArgs e) 
/// <summary> 
/// This event is fired when the mouse hovers over a button 
/// </summary> 
public void Button_OnMouseEnter(object sender, EventArgs e) 
{ 
    // Change the cursor to a Hand pointer 
    Cursor = Cursors.Hand; 
} 
#endregion 
+0

Điều này cho biết thêm một điều khiển bên trong Button nhưng điều này là tốt hơn nhiều! Cảm ơn, tôi sẽ sử dụng cái này! – Sree