C# - 将对象转换为画笔 (WPF)
C# - convert Object to Brush (WPF)
我正在尝试使用 MenuItem.Icon [通过 MenuItem 控件] 设置主窗口的背景。问题是 MenuItem.Icon 是一个 object,而 Mainwindow.Background 是一个 Brush(或 Brush Control)类型。 有没有办法在这两者之间进行转换?我已经尝试过 BrushConverter.ConvertFrom,但它无法转换 Image 对象(这是显示的异常消息)。谢谢!这是一些 XAML 代码:
<MenuItem Header="Waterfall" Click="BackgroundMenuItem_Click">
<MenuItem.Icon>
<Image Source="images/backgrounds/Waterfall.jpg"/>
</MenuItem.Icon>
</MenuItem>
下面是代码:
//switch background:
//event
private void BackgroundMenuItem_Click(object sender, RoutedEventArgs e)
{
try
{
BackgroundMenuItem_Switch((MenuItem)sender, e);
}
catch(Exception exc)
{ MessageBox.Show(exc.Message); }
}
//switch func
private void BackgroundMenuItem_Switch(MenuItem sender, RoutedEventArgs e)
{
var converter = new BrushConverter();
var brush = converter.ConvertFrom(sender.Icon);
this.Background = (Brush)brush;
}
您可以使用 ImageBrush:
<Window ...>
<Window.Background>
<ImageBrush ImageSource="img/0.png" />
</Window.Background>
...
</Window>
Background = new ImageBrush() { ImageSource = new BitmapImage(new Uri("img/1.png", UriKind.RelativeOrAbsolute)) };
或者,如果您使用的是图像资源,请使用打包 URI:
Background = new ImageBrush() { ImageSource = new BitmapImage(new Uri("pack://application:,,,/img/x.png", UriKind.RelativeOrAbsolute)) };
您可以根据您的图片创建 ImageBrush。
private void BackgroundMenuItem_Switch(MenuItem sender, RoutedEventArgs e)
{
this.Background = new ImageBrush(((Image)(sender.Icon)).Source);
}
我正在尝试使用 MenuItem.Icon [通过 MenuItem 控件] 设置主窗口的背景。问题是 MenuItem.Icon 是一个 object,而 Mainwindow.Background 是一个 Brush(或 Brush Control)类型。 有没有办法在这两者之间进行转换?我已经尝试过 BrushConverter.ConvertFrom,但它无法转换 Image 对象(这是显示的异常消息)。谢谢!这是一些 XAML 代码:
<MenuItem Header="Waterfall" Click="BackgroundMenuItem_Click">
<MenuItem.Icon>
<Image Source="images/backgrounds/Waterfall.jpg"/>
</MenuItem.Icon>
</MenuItem>
下面是代码:
//switch background:
//event
private void BackgroundMenuItem_Click(object sender, RoutedEventArgs e)
{
try
{
BackgroundMenuItem_Switch((MenuItem)sender, e);
}
catch(Exception exc)
{ MessageBox.Show(exc.Message); }
}
//switch func
private void BackgroundMenuItem_Switch(MenuItem sender, RoutedEventArgs e)
{
var converter = new BrushConverter();
var brush = converter.ConvertFrom(sender.Icon);
this.Background = (Brush)brush;
}
您可以使用 ImageBrush:
<Window ...>
<Window.Background>
<ImageBrush ImageSource="img/0.png" />
</Window.Background>
...
</Window>
Background = new ImageBrush() { ImageSource = new BitmapImage(new Uri("img/1.png", UriKind.RelativeOrAbsolute)) };
或者,如果您使用的是图像资源,请使用打包 URI:
Background = new ImageBrush() { ImageSource = new BitmapImage(new Uri("pack://application:,,,/img/x.png", UriKind.RelativeOrAbsolute)) };
您可以根据您的图片创建 ImageBrush。
private void BackgroundMenuItem_Switch(MenuItem sender, RoutedEventArgs e)
{
this.Background = new ImageBrush(((Image)(sender.Icon)).Source);
}