设置MinWidth时发生剪切

时间:2015-03-17 13:56:28

标签: wpf xaml itemtemplate

我为ItemTemplate获得了ItemsControl,其内容会在我指定MinWidth时被裁剪,导致宽度大于设置Width容器,但不会发生削波。

下图显示了MinWidth设置为100的按钮,而容器的Width则绑定了更小的按钮,&#34可以看到;测试" 被切断。

Clipping of a button

<timeline:TimeControl.ItemTemplate>
    <DataTemplate DataType="activityVm:WorkIntervalViewModel">
        <Button
            MinWidth="100"
            Content="Test" />
    </DataTemplate>
</timeline:TimeControl.ItemTemplate>

我的项容器派生自ContentControl,并应用了以下模板:

<Style TargetType="{x:Type controls:TimeControlItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type controls:TimeControlItem}">
                <ContentPresenter />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

导致此行为的原因是什么,以及如何保证内容永远不会被剪裁,而是获得最小请求宽度?

2 个答案:

答案 0 :(得分:0)

我认为您的问题是由于TextBlock给出了文本(Content)的最小宽度造成的,但是它不可见,因为它居中并且您的父控件没有给它所需的宽度。试试这个:

<DataTemplate DataType="activityVm:WorkIntervalViewModel">
    <Button MinWidth="100" HorizontalContentAlignment="Left" Content="Test" />
</DataTemplate>

答案 1 :(得分:0)

ItemTemplate内的内容大小超过容器大小时,似乎就会发生剪切,因此只需设置Width而不是MinWidth

虽然我不完全理解这背后的机制,但我似乎记得Canvas的度量阶段有些不同,所以我决定将ItemTemplate中指定的控件包裹起来({{1}在前面的例子中)Button

Canvas

此按钮现在显示为100像素宽,即使它比项目容器中的尺寸宽。

如果有人知道这里的确切区别是什么,我仍然非常有兴趣了解这里发生了什么。