【发布时间】:2017-07-03 07:48:01
【问题描述】:
Tabbar 是 iOS 和 Android 上非常常见的导航控件。但是UWP好像没有。
我看过一个例子XamlPivot(SHORTCUT)①,使用Pivot制作TabBar,效果很好,我尝试修改一下,让TabBar在底部,上部的内容。
我的项目是 MasterDetail,Master 部分是 TabBar(即 TabsStyle Pivot),Detail 部分只是空白。
现在发现一个大问题,TabBar每个item并没有自动划分宽度,于是我尝试使用数据绑定和值转换器来动态提供宽度,绑定源是MasterGrid的ActuallyWidth,但是ActuallyWidth是不随窗口大小而变化,当Window on WideState时,Mater部分会变为空白。
那么,如何动态改变 TabBarItem 的宽度?
各种窗口大小效果图(去掉"()"):
(https:)//i.stack.imgur.com/3GE5t.png
(https:)//i.stack.imgur.com/FyQuX.png
(https:)//i.stack.imgur.com/pChwz.png
(https:)//i.stack.imgur.com/cib1l.png
XAML:
<Pivot x:Name="pivot"
Style="{StaticResource TabsStylePivotStyle}">
<PivotItem>
<PivotItem.Header>
<local:TabHeader Width="{Binding ActualWidth, Converter={StaticResource AutoWidthConverter}, ElementName=pivot, Mode=OneWay}"
Glyph=""
Label="item 1" />
</PivotItem.Header>
<TextBlock Text="Content content content" />
</PivotItem>
<PivotItem>
<PivotItem.Header>
<local:TabHeader Width="{Binding ActualWidth, Converter={StaticResource AutoWidthConverter}, ElementName=pivot, Mode=OneWay}"
Glyph=""
Label="item 2" />
</PivotItem.Header>
<TextBlock Text="Content content content" />
</PivotItem>
<PivotItem>
<PivotItem.Header>
<local:TabHeader Width="{Binding ActualWidth, Converter={StaticResource AutoWidthConverter}, ElementName=pivot, Mode=OneWay}"
Glyph=""
Label="item 3" />
</PivotItem.Header>
<TextBlock Text="Content content content" />
</PivotItem>
</Pivot>
转换器:
public object Convert(object value, Type targetType, object parameter, string language)
{
return (double)value / 3;
}
【问题讨论】:
-
您应该查看我构建的Tab 控件。 ;)
-
我喜欢你的设计!
标签: xaml data-binding uwp-xaml tabbar