更改按钮的内容将删除样式WPF

本文关键字:删除 样式 WPF 按钮 | 更新日期: 2023-09-27 18:04:55

更改按钮的内容图像将使其忽略任何先前定义的布局属性。

我怀疑的是,在Button click事件中更改this.Content时,它修改了:

<Button>
     Everything found between these tags.
</Button>

由于我的Style在这些标签中,它会覆盖它。

下面是记录的代码:

private void ChangeImageFile(object sender, RoutedEventArgs e)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Filter = "Image Files|*.png;*.jpeg;*.tiff;*.gif;*.bmp;*.jpg";
        ofd.FilterIndex = 1;
        ofd.Multiselect = false;
        bool? ok = ofd.ShowDialog();
        if(ok == true)
        {
            Image loaded = new Image();
            loaded.Source = new BitmapImage(new Uri(ofd.FileName));
            loaded.Height = 100;
            this.Content = loaded;
        }
    }

<Button x:Name="BookCover" Click="ChangeImageFile">
            <Button.Content>
                <Image Source="Images/NewBook.png"/>
            </Button.Content>
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    ... LONG STYLE ...
                </Style>
            </Button.Style>
        </Button>

更改按钮的内容将删除样式WPF

当您使用this.Content时,这指的是当前窗口而不是按钮。您要么需要通过Name访问按钮,要么强制转换发送者。

由名称:

BookCover.Content = loaded;

强制转换发送方:

Button btn = (sender as Button);
if(btn != null)
   btn.Content = loaded;