当我尝试在作为TabItem标头内容的Label上使用click事件时,我遇到了问题。
<TabItem Name="prod" MouseLeftButtonDown="prod_MouseLeftButtonDown">
<TabItem.Header >
<Label Content="Prod" MouseLeftButtonDown="prod_MouseLeftButtonDown" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</TabItem.Header>
问题是Label不占用整个TabItem标题,因此如果用户点击Header的边距,则不会触发Click事件。
你可以看到我希望现在没有红线的空格。
我该如何解决这个问题?
谢谢
答案 0 :(得分:3)
您可以做的最简单的事情是应用一些否定Margin
并将其与Padding
互补。 ContentPresenter始终具有 硬编码 边距。因此,一旦调整好Margin
井(例如通过反复试验),这种方式应该始终如一。 Padding
为正数且反函数为Margin
。这是我尝试过的,它适用于我,你可以根据你的要求调整保证金:
<Label Content="Prod" MouseLeftButtonDown="prod_MouseLeftButtonDown"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Margin="-8,-3,-8,-3" Padding="8,3,8,3"/>
如果不进行这样的调整,您无法轻易更改硬编码Margin
,除非 复制并修改TabControl
的标准模板。
答案 1 :(得分:1)
只需触发MouseLeftButtonDown
本身的TabItem
事件,而不是标签......
<TabItem Name="prod" MouseLeftButtonDown="prod_MouseLeftButtonDown">
<TabItem.Header >
<Label Content="Prod" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
</TabItem.Header>
</TabItem>
答案 2 :(得分:0)
尝试将标签的height
和width
属性设置为Auto
<Label Height="Auto" Width="Auto" Content="Prod" MouseLeftButtonDown="prod_MouseLeftButtonDown" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
请参阅msdn:宽度属性
获取或设置控件的宽度。(从Control继承。)
和高度属性
获取或设置控件的高度。(从Control继承。)
答案 3 :(得分:0)
您可以访问ContentPresenter
本身并相应地进行修改。您也可以将其用作所有TabItems
的样式。
<TabControl Width="500">
<TabControl.Items>
<TabItem>
<TabItem.Header>
Prod
</TabItem.Header>
<TabItem.HeaderTemplate>
<DataTemplate>
<ContentPresenter Margin="-8, -3, -8, 0" >
<ContentPresenter.Content>
<TextBlock MouseLeftButtonDown="prod_MouseLeftButtonDown" Text="{TemplateBinding Content}"/>
</ContentPresenter.Content>
</ContentPresenter>
</DataTemplate>
</TabItem.HeaderTemplate>
</TabItem>
</TabControl.Items>
</TabControl>