【发布时间】:2017-12-07 19:25:28
【问题描述】:
我有一个 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 以紧贴左窗格?
【问题讨论】:
-
为什么人们到处乱贴“简单”这个词?只是好奇这是什么意思。无论如何,我没有看到网格拆分器,并且我不确定您的布局应该是什么样子,所以这里有一个猜测的元素,但是如果您希望标签的大小不适合它所在的列,请将其设置为 @ 987654324@ 并且它会自动调整到其内容的大小,位于其父级的左边缘。如果您想在标签文本周围添加一点填充,请设置标签的 Padding 属性。
-
"目前GridSplitter只想渲染在Window的中心" -- 嗯?
-
这是包含标签和矩形的用户控件。拆分器位于包含加载这些标签列表的堆栈面板的窗口上。我怀疑对齐可能是问题所在。
-
您需要全面了解这里发生的情况。我不知道“容器”指的是什么控件,或者你想将它调整到什么大小,或者为什么你不能。
-
我用简单的意思是“现成的,与原始软件一起打包,绝不会以许多可怕的方式进行修改,传统上修改 UI 控件并不能完全满足人们的需求。 "