我有一个像这样的WPF按钮:
<Page.Resources>
<ImageBrush x:Key="black_pane_normal" ImageSource="/Images/TroubleShooting/black_pane_clear.png" />
</Page.Resources>
<Button x:Name="ButtonBlackPane" Background="{StaticResource black_pane_normal}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="157" Height="136" MouseEnter="ButtonBlackPane_MouseEnter" MouseLeave="ButtonBlackPane_MouseLeave" Click="ButtonBlackPane_Click" RenderTransformOrigin="0.533,0.281" Margin="189,199,0,0"/>
我的C#代码背后是:
BitmapSource _black_pane_yellow_border = Imaging.CreateBitmapSourceFromHBitmap(InstallerToolkit.Properties.Resources.black_pane_yellow.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
BitmapSource _black_pane_no_border = Imaging.CreateBitmapSourceFromHBitmap(InstallerToolkit.Properties.Resources.black_pane_clear.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
private void ButtonBlackPane_MouseEnter(object sender, MouseEventArgs e)
{
ButtonBlackPane.Background = new ImageBrush(_black_pane_yellow_border);
}
private void ButtonBlackPane_MouseLeave(object sender, MouseEventArgs e)
{
ButtonBlackPane.Background = new ImageBrush(_black_pane_no_border);
}
我的第一个问题是我的图片没有填满整个按钮背景,我如何填写它?
我的第二个问题是,当鼠标进入按钮时,正确的背景图像会显示片刻,然后显示默认的灰色按钮图像,我的图像会消失,我该如何解决?
答案 0 :(得分:1)
首先,首先使用静态资源设置背景,然后每次使用代码将其设置为新的ImageBrush对象,这不是一个好习惯。查看FindResource方法(http://msdn.microsoft.com/de-de/library/system.windows.frameworkelement.findresource(v=vs.110).aspx)以在后面的代码中使用您的资源。
其次,您应该使用样式和触发器来修改控件的外观,具体取决于MouseOver-State。有一个名为IsMouseOver的属性,您可以使用它。这是一个例子:
<Page.Resources>
<Style TargetType="Button" x:Key="myButtonStyle">
<Setter Property="Foreground" Value="Red" />
<Setter Property="FontSize" Value="12" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Foreground" Value="Blue" />
<Setter Property="Cursor" Value="Hand"/>
<Setter Property="FontSize" Value="16" />
</Trigger>
</Style.Triggers>
</Style>
</Page.Resources>
<Button Width="200" Height="100" Style="{StaticResource myButtonStyle}">Hello, World!</Button>
第三,由于WPF按钮的默认模板,使用鼠标悬停时无法直接更改其背景。这里讨论并解决了这个问题:How do you change Background for a Button MouseOver in WPF? 如果您想了解有关样式化WPF控件以及如何使用默认模板的更多信息,请查看此处:http://msdn.microsoft.com/en-us/library/aa970773.aspx