如何解决根据UserControl的TabControl中的TabItem可见性触发TabItem调整大小
我有一个带有TabControl的UserControl,该控件的样式为TabItems。 “项目”选项卡具有与其关联的可见性属性。我想根据对标签项目的可见性更改来调整标签宽度。该触发器适用于静态值,但不适用于MultiBinding。
Control.Xaml
<UserControl x:Class="MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
x:Name="UserControl"
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
<local:TabSizeConverter x:Key="SpanningTabHeaderSizeConverter"/>
</ResourceDictionary>
</UserControl.Resources>
<TabControl x:Name="_tabControl" ItemsSource="{Binding ElementName=UserControl,Path=XYZ }" Style="{StaticResource TabControlStyle}" >
<TabControl.ItemContainerStyle>
<Style targettype="TabItem">
<Setter Property="Header" Value="{Binding Path=Name}"/>
<Setter Property="FontSize" Value="17"/>
<Setter Property="Visibility" Value="{Binding Path=Visible,Converter={StaticResource BooleanToVisibilityConverter}}"/>
<Setter Property="Width">
<Setter.Value>
<MultiBinding Converter="{StaticResource SpanningTabHeaderSizeConverter}">
<Binding RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type TabControl}}" />
<Binding RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type TabControl}}" Path="ActualWidth" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</TabControl>
</UserControl>
Control.Xaml.cs
public class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
}
//Property want to use in case MultiBinding does not work to trigger manual updateTarget on tabitems
public bool TabItemFlag
{
get { return (bool)this.GetValue(TabItemFlagProperty); }
set { this.SetValue(TabItemFlagProperty,value); }
}
public static readonly DependencyProperty TabItemFlagProperty = DependencyProperty.Registerattached(
"TabItemFlag",typeof(bool),typeof(MyControl),new PropertyMetadata(false));
}
public class TabSizeConverter : IMultiValueConverter
{
public object Convert(object[] values,Type targettype,object parameter,CultureInfo culture)
{
//logic for width
}
这适用于静态值:
<Style targettype="TabItem">
<Setter Property="Header" Value="{Binding Path=Name}"/>
<Setter Property="FontSize" Value="17"/>
<Setter Property="Visibility" Value="{Binding Path=Visible,AncestorType={x:Type TabControl}}" Path="ActualWidth" />
</MultiBinding>
</Setter.Value>
</Setter>
**<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Setter Property="Width" Value="110.00" />
</Trigger>
</Style.Triggers>**
</Style>
我希望这样的工作:
<Style targettype="TabItem">
<Setter Property="Header" Value="{Binding Path=Name}"/>
<Setter Property="FontSize" Value="17"/>
<Setter Property="Visibility" Value="{Binding Path=Visible,AncestorType={x:Type TabControl}}" Path="ActualWidth" />
</MultiBinding>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="Visibility" Value="Collapsed">
<Setter Property="Width">
<Setter.Value>
<MultiBinding Converter="{StaticResource SpanningTabHeaderSizeConverter}">
<Binding RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type TabControl}}" Path="ActualWidth" />
</MultiBinding>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
还考虑过在Control中有一个依赖对象,该对象可以在触发器中更新,但UserControl在Style的TargetName中无法识别。
非常感谢您的帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。