XAML WPF自定义模板不显示按钮内容

owfi6suc  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(166)

在.NET WPF应用程序中从.NET Framework 4.8迁移到.NET 6.0期间,我遇到了一个潜在的错误。
以下是.NET Framework中显示的正确输出:

以下是当前.NET6.0输出结果(注意缺少的按钮):

我还要补充的是,在从Framework迁移到Core的过程中,代码保持不变。有人可以请帮助,并告诉我为什么按钮不显示在前面的例子?下面是这些按钮的源代码:

<Style TargetType="{x:Type dialog:DialogTemplate}" BasedOn="{StaticResource {x:Type Window}}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type dialog:DialogTemplate}">
                    <Grid Background="White">
                        <Grid.RowDefinitions>
                            <RowDefinition />
                            <RowDefinition Height="42" />
                        </Grid.RowDefinitions>
                        <ContentPresenter Margin="10" />
                        <StackPanel HorizontalAlignment="Right" Grid.Row="1" Orientation="Horizontal"
                                    Margin="10">
                            <Button IsDefault="True" Command="dialog:DialogTemplate.DialogOKClickedCommand" Width="100" Margin="0,0,5,0" Content="{TemplateBinding OKButtonText}"  />
                            <Button IsCancel="True" Width="100">Abbrechen</Button>
                        </StackPanel>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我尝试调整ControlTemplate/ContentPresenter,但没有成功。

cqoc49vn

cqoc49vn1#

我猜您没有覆盖DefaultStyleKey元数据。如果不这样做,自定义控件(派生自Window)将具有DefaultStyleKey = {x:Type Window}。所以它不会找到你的风格。
点击这里:When overriding DefaultStyleKey is necessary?
顺便说一句,我建议你使用Snoop;这样你就可以看到你的自定义窗口的Style属性没有被正确的应用,至少,当我复制你的代码时,我的代码就是这样的。

相关问题