今天我第一次尝试WPF,我遇到了一个问题,带有MenuButtonTheme样式的RadioButtons没有在StackPanel中显示。我在网上找不到任何解决方案。菜单按钮应该显示在它们自己下面。
下面是代码:
主窗口
<Window x:Class="GetraenkespenderDesign.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:GetraenkespenderDesign"
mc:Ignorable="d"
Height="600" Width="920"
WindowStyle ="None"
ResizeMode="NoResize"
Background="Transparent"
AllowsTransparency="True">
<Border Background="#272537"
CornerRadius="20">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200">
</ColumnDefinition>
<ColumnDefinition Width="0"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="75">
</RowDefinition>
<RowDefinition Height="0"/>
</Grid.RowDefinitions>
<TextBlock Text="Elysian"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Foreground="White"
FontSize="22"
Margin="20,0,0,0"/>
<StackPanel Grid.Row="1"
Orientation="Vertical">
<RadioButton Content="Home"
Height="50"
Foreground="White"
FontSize="14"
Style="{StaticResource MenuButtonTheme}"/>
<RadioButton Content="Discovery"
Height="50"
Foreground="White"
FontSize="14"
Style="{StaticResource MenuButtonTheme}"/>
<RadioButton Content="Feature"
Height="50"
Foreground="White"
FontSize="14"
Style="{StaticResource MenuButtonTheme}"/>
</StackPanel>
</Grid>
</Border>
</Window>
菜单按钮主题:
ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type RadioButton}"
x:Key="MenuButtonTheme">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Background="{TemplateBinding Background}">
<TextBlock Text="{TemplateBinding Property=ContentStringFormat}"
VerticalAlignment="Center"
Margin="50,0,0,0"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="0"/>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="#22202f"/>
</Trigger>
</Style.Triggers>
</Style>
</ResourceDictionary>
1条答案
按热度按时间iqih9akk1#
代码中有两个问题会阻止视图按预期呈现。
网格布局
您已经定义了具有2列和2行的网格布局。
然后,您将StackPanel放在第1行,如上所述,它的高度为0 px。因此,StackPanel的高度为0,因此您看不到它。
您可以使用按比例调整大小来允许行/列使用所有剩余的可用空间。因此,您可以通过更改网格布局来解决此问题:
模板绑定
在
ControlTemplate
中,你有这样的代码:这不是绑定正确的属性。您可能希望绑定
Content
,而不是ContentStringFormat
。