使用户控件中的WPF标签适合其内容的宽度

时间:2017-12-07 19:25:29

标签: c# wpf

我有一个WPF用户控件,在网格上包含一个简单的标签和矩形,如下所示:

   <Grid x:Name="Pressbutton">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="14"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Rectangle x:Name="LayerColour" Grid.Column="0" Fill="#FFF4F4F5" Width="10" Height="10" Margin="0" Stroke="Black" VerticalAlignment="Center" MinWidth="10" MinHeight="10" Visibility="Visible" HorizontalAlignment="Center"/>
        <Label x:Name="DisplayNameLabel" Grid.Column="1" Content="Label"  Margin="0" VerticalAlignment="Center" Height="26" Visibility="Visible" />
    </Grid>

然后我将它们放在StackPanel中,它可以正常工作并使用GridSplitter将该标签列表与窗口的其他部分分开。

我的窗口看起来有点像这样:

==========================================x
| StackPanel           |   Other Stuff    |
|    PressButton1      |                  |
|    PressButton2      |                  |
|    PressButton3      |                  |
===========================================

我的问题是,目前GridSplitter只想在窗口的中心渲染,我希望标签列表明显更窄。标签面板的理想起始宽度与最宽的标签一样宽。

我已尝试测量用户控件的ActualWidth,但始终将其设置为包含StackPanel的宽度。如果我尝试测量标签的宽度,那些似乎也决定拉伸到它们的最大可能宽度。似乎很荒谬,我必须经历预渲染标签文本的整个过程,以便了解当标签已经在标签上时我的标签应该有多宽,所以我假设我做错了。

如何在标签上找到文字的宽度,以便我可以移动GridSplitter以贴合左窗格?

1 个答案:

答案 0 :(得分:0)

我假设你的“绘图”你有一个有两列的网格。您可以将第一列设置为自动宽度,并将堆栈面板放在那里。 将第二列设置为宽度1 *,创建一个GridSplitter并将其Grid.Column设置为1,为其设置固定宽度(我通常将其设置为10)并将Horizo​​ntalAlignment设置为Left,将VerticalAlignment设置为Stretch。 应该做的伎俩。