自动调整TextBlock长度到字符长度(在网格中)

时间:2013-07-04 07:23:32

标签: c# wpf xaml

我有一个Grid,我用TextBlock和另一个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跨越Grid的整个宽度,使其可以从Grid中的任何位置单击。我想要的是它只需要显示文本所需的宽度(可能会有所不同,所以我不能使用静态宽度)。

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

将StackBnel中的TextBlock封装起作用,但我想知道是否有更好(更有效)的方法。

<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黑客更好的方法,或者这是唯一的方法?谢谢!

1 个答案:

答案 0 :(得分:1)

尝试设置网格左侧HorizontalAlignment的{​​{1}}。

TextBlock