根据UserControl的TabControl中的TabItem可见性触发TabItem调整大小

如何解决根据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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?