当前位置:  开发笔记 > 编程语言 > 正文

如何将WPF选项卡项标题拉伸到父控件宽度

如何解决《如何将WPF选项卡项标题拉伸到父控件宽度》经验,为你挑选了3个好方法。

在XAML中是否有一种方法可以使标签项标题在选项卡控件的宽度上伸展?

例如,我有三个选项卡:红色,蓝色和绿色.如果我有一个宽度设置为auto的标签控件,标签页眉只会填充标签内容上方的部分空间,但我希望它们填满所有空间.对于我的三个标签示例,红色应该占据控制的前三分之一,蓝色应该占据中心的第三个,并且绿色最后的第三个.

我知道如何在我现在正在处理的代码中执行此操作,但我有兴趣以最简单的方式执行此操作.



1> Ryan Versaw..:

我拿了乔丹的例子并做了一些修改.此版本适用于任意数量的选项卡:

namespace WpfApplication1.Converters
{
    public class TabSizeConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            TabControl tabControl = values[0] as TabControl;
            double width = tabControl.ActualWidth / tabControl.Items.Count;
            //Subtract 1, otherwise we could overflow to two rows.
            return (width <= 1) ? 0 : (width - 1);
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
            System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
}

xaml中的相同命名空间:

xmlns:local="clr-namespace:WpfApplication1.Converters"

这将使所有标签使用它:


    
    


当使用这个tabitems堆叠在彼此的顶部,但如果我将(宽度 - 1)更改为(宽度 - 2.1)然后它"工作",但我似乎在tabitems的任一侧有一个像素空间.我做得不对的东西?
当标签项的数量<= 3时,我得到与@ChrisHDog相同的结果.四个及以上它的效果很好.我把结果改为:`return(width <= 1)?0 :(宽度 - 1.34);`这似乎照顾了所有数量的标签项.

2> Charlie..:

每个人似乎都在转换路径,但它实际上就像在模板中UniformGrid使用Rows设置为1 一样简单,而不是.当然,你必须重新模板化,但这并不算太糟糕.TabControlTabPanel



3> 小智..:

我能够使用像这样的转换器:

namespace WpfApplication1.Converters
{
    public class SizeConverter : IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            double width = Double.Parse(value.ToString());
            //Subtract 1, otherwise we could overflow to two rows.
            return .25 * width - 1;
        }

        public object ConvertBack(object value, Type targetType, object parameter,
            System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }

        #endregion
    }
}

然后将命名空间添加到我的xaml:

xmlns:local="clr-namespace:WpfApplication1.Converters"

然后使所有TabItems使用转换器:


        
        
    

x_Grid是x:父元素的名称我希望标签是1/4,如果这是有道理的.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有