1

我有一个用 TextBlock 和另一个 Grid 填充的 Grid,它最初是隐藏的。由于我有 TextBlock 来响应单击事件,因此我只希望在用户单击文本本身时调用该方法,而不是在网格中的任何位置。这就是我的代码现在的样子:

<Grid x:Name="LayoutRoot" Height="25">
    <TextBlock x:Name="NewLabelButton" Text="Add New" Width="Auto" Foreground="Blue" TextDecorations="Underline" MouseLeftButtonUp="AddNew_OnClick" VerticalAlignment="Center"/>
    <Grid x:Name="NewLabelPanel" Visibility="Collapsed">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBox x:Name="NameBox" TextChanged="NameBox_OnTextChanged" KeyDown="NameBox_OnKeyDown" Grid.Column="0"/>
        <Button x:Name="OKButton" Content="OK" Click="OKButton_OnClick" IsEnabled="False" Margin="2,0,0,0" Grid.Column="1"/>
        <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_OnClick" Margin="2,0,0,0" Grid.Column="2"/>
    </Grid>
</Grid>

这导致 TextBlock 跨越网格的整个宽度,使其基本上可以从网格中的任何位置单击。我想要的是它的宽度仅与显示文本所需的宽度一样宽(可能会有所不同,所以我不能使用静态宽度)。

使用 StackPanel 而不是 Grid 解决了 TextBlock 宽度问题,但随后子 Grid 不会扩展以填充它需要的整个 StackPanel。

将 TextBlock 封装在 StackPanel 中是可行的,但我想知道是否有更好(和更有效)的方法。

<Grid x:Name="LayoutRoot" Height="25">
    <StackPanel Orientation="Horizontal">
        <TextBlock x:Name="NewLabelButton" Text="Add New" Foreground="Blue" TextDecorations="Underline" MouseLeftButtonUp="AddNew_OnClick" VerticalAlignment="Center"/>
    </StackPanel>
    <Grid x:Name="NewLabelPanel" Visibility="Collapsed">

所以我的问题是:有没有比我的小 StackPanel hack 更好的方法,或者这是唯一的方法?谢谢!

4

1 回答 1

1

尝试将 的 设置在网格HorizontalAlignmentTextBlock左侧。

<TextBlock x:Name="NewLabelButton" HorizontalAlignment="Left" Text="Add New" Width="Auto" Foreground="Blue" TextDecorations="Underline" MouseLeftButtonUp="AddNew_OnClick" VerticalAlignment="Center"/>
于 2013-07-04T07:44:36.023 回答