XAML StackPanel WPF .NET 6中未显示任何对象

8xiog9wr  于 2023-06-03  发布在  .NET
关注(0)|答案(1)|浏览(236)

今天我第一次尝试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>
iqih9akk

iqih9akk1#

代码中有两个问题会阻止视图按预期呈现。

网格布局

您已经定义了具有2列和2行的网格布局。

  • 第0列的宽度为200 px。
  • 列1的宽度为0 px。
  • 第0行是75 px高。
  • 行1是0 px高。
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="200">

    </ColumnDefinition>
    <ColumnDefinition Width="0"/>
</Grid.ColumnDefinitions>

<Grid.RowDefinitions>
    <RowDefinition Height="75">

    </RowDefinition>
    <RowDefinition Height="0"/>
</Grid.RowDefinitions>

然后,您将StackPanel放在第1行,如上所述,它的高度为0 px。因此,StackPanel的高度为0,因此您看不到它。

<StackPanel Grid.Row="1"

您可以使用按比例调整大小来允许行/列使用所有剩余的可用空间。因此,您可以通过更改网格布局来解决此问题:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="200"/>
    <ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>

<Grid.RowDefinitions>
    <RowDefinition Height="75"/>
    <RowDefinition Height="*"/>
</Grid.RowDefinitions>

模板绑定

ControlTemplate中,你有这样的代码:

<TextBlock Text="{TemplateBinding Property=ContentStringFormat}"
    VerticalAlignment="Center"
    Margin="50,0,0,0"/>

这不是绑定正确的属性。您可能希望绑定Content,而不是ContentStringFormat

<TextBlock Text="{TemplateBinding Property=Content}"
    VerticalAlignment="Center"
    Margin="50,0,0,0"/>

相关问题