具有StatusItem的StatusBar中带有分隔符的DataTemplate

所以我有这个StatusBar

  <StatusBar x:Name="RightSideStaticStatusBar" Grid.Column="2">
                <StatusBar.Background>
                    <SolidColorBrush Color="AliceBlue" Opacity="0.5"></SolidColorBrush>
                </StatusBar.Background>
                <Separator></Separator>
                <StatusBarItem HorizontalAlignment="Right" HorizontalContentAlignment="Stretch" Width="300">

                </StatusBarItem>
            </StatusBar>

哪个返回一个以分隔符开头且包含一项的StatusBar

具有StatusItem的StatusBar中带有分隔符的DataTemplate

现在,我还有另一个StatusBar,其中包含具有特定模板的项目的动态列表。

  <StatusBar x:Name="StatusBar" ItemsSource="{Binding}" Grid.Column="1">
                <StatusBar.Background>
                    <SolidColorBrush Color="Red" Opacity="0.5"/>
                </StatusBar.Background>
                <StatusBar.ItemTemplate>
                    <DataTemplate>                    

                        <StackPanel Orientation="Horizontal">
                            <uc:StatusBarItem/>
                            <Separator>
                                <Separator.LayoutTransform>
                                    <RotateTransform Angle="90" />
                                </Separator.LayoutTransform>
                            </Separator>
                        </StackPanel>
                    </DataTemplate>
                </StatusBar.ItemTemplate>
            </StatusBar>

具有StatusItem的StatusBar中带有分隔符的DataTemplate

这是第二个状态栏的结果。分隔符的外观完全不同,“静态”分隔符的颜色为黑色,而“动态”分隔符的颜色为白色。高度也不同。

有没有办法制作一个以用户控件作为模板的StatusBar并在每个项目之间添加分隔符?我试图在用户控件内添加分隔符,但结果与您在此处看到的相同,分隔符很小,现在占据了StatusBar的整个高度。

youkuan 回答:具有StatusItem的StatusBar中带有分隔符的DataTemplate

有没有一种方法可以使具有用户控件的StatusBar成为 模板并在每个项目之间添加分隔符?

您应该使用ItemContainerStyle来获得所需的结果:

<StatusBar.ItemContainerStyle>
    <Style TargetType="StatusBarItem" BasedOn="{StaticResource {x:Type StatusBarItem}}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="StatusBarItem">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="5"/>
                        </Grid.ColumnDefinitions>
                        <ContentPresenter />
                        <Separator Grid.Column="1"  Style="{StaticResource {x:Static StatusBar.SeparatorStyleKey}}" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</StatusBar.ItemContainerStyle>

然后您的ItemTemplate将会变成:

<StatusBar.ItemTemplate>
    <DataTemplate>
        <uc:StatusBarItem/>
    </DataTemplate>
</StatusBar.ItemTemplate>

此外,我在StatusBar.Separator的{​​{1}}上应用了Separator样式,以获取默认的状态栏分隔符外观。

结果

Result showing status bar separators

此处是指向docs的链接,用于进一步阅读StatusBar的默认样式和模板。

本文链接:https://www.f2er.com/2477122.html

大家都在问