我有一个用 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 更好的方法,或者这是唯一的方法?谢谢!