【问题标题】:C# - convert Object to Brush (WPF)C# - 将对象转换为画笔 (WPF)
【发布时间】:2017-01-25 11:49:02
【问题描述】:

我正在尝试使用 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 不是您要找的吗?
  • 其实我更喜欢原版而不是编辑版。您实际上是在转换图像,而不是对象。 MenuItem.Iconobject 的事实只是 IMO 的技术细节。事实上,这个编辑甚至可能会改变问题的含义。我认为其他人可能更容易通过原始标题找到这篇文章。但也许这只是我......

标签: c# .net wpf image brush


【解决方案1】:

您可以从您的图像创建ImageBrush

private void BackgroundMenuItem_Switch(MenuItem sender, RoutedEventArgs e)
{
    this.Background = new ImageBrush(((Image)(sender.Icon)).Source);
}

【讨论】:

  • 非常感谢! (以及其他所有人),似乎出于某种原因 MenuItem.Icon 被视为一个对象,它没有 .Source 属性。因此我使用了this.Background = new ImageBrush(((Image)(sender.Icon)).Source);
  • @Yair 是的,MenuItem.Icon 的类型为 object。我错过了。我已经更新了我的答案以包括演员表..
【解决方案2】:

您可以使用 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)) };

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2010-09-27
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    相关资源
    最近更新 更多