在.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,但没有成功。
1条答案
按热度按时间cqoc49vn1#
我猜您没有覆盖DefaultStyleKey元数据。如果不这样做,自定义控件(派生自Window)将具有DefaultStyleKey = {x:Type Window}。所以它不会找到你的风格。
点击这里:When overriding DefaultStyleKey is necessary?
顺便说一句,我建议你使用Snoop;这样你就可以看到你的自定义窗口的Style属性没有被正确的应用,至少,当我复制你的代码时,我的代码就是这样的。