AdaptiveTrigger和DataTemplate中 [英] AdaptiveTrigger and DataTemplate

查看:154
本文介绍了AdaptiveTrigger和DataTemplate中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一个DataTemplate威尔​​AdaptiveTrigger工作?

这是我的code我使用定制我的ShellNavigation,这是工作以外的可视状态很好。他们不会触发任何东西。

 <外壳:ShellHeadView X:键=ShellHeadView_01>
    <外壳:ShellHeadView.ContentTemplate>
        <&DataTemplate的GT;
            <电网保证金=20,0>
                < VisualStateManager.VisualStateGroups>
                    < VisualStateGroup>
                        <的VisualState X:NAME =GreenBackgroundVisualState>
                            < VisualState.Setters>
                                <二传手目标=headViewLeft.BackgroundVALUE =绿色/>
                            < /VisualState.Setters>
                            < VisualState.StateTriggers>
                                < AdaptiveTrigger MinWindowWidth =1000/>
                            < /VisualState.StateTriggers>
                        < /&的VisualState GT;
                        <的VisualState X:NAME =OrangeBackgroundVisualState>
                            < VisualState.Setters>
                                <二传手目标=headViewLeft.BackgroundVALUE =橙色/>
                            < /VisualState.Setters>
                            < VisualState.StateTriggers>
                                < AdaptiveTrigger MinWindowWidth =2000/>
                            < /VisualState.StateTriggers>
                        < /&的VisualState GT;
                        <的VisualState X:NAME =RedBackgroundVisualState>
                            < VisualState.Setters>
                                <二传手目标=headViewLeft.BackgroundVALUE =红/>
                            < /VisualState.Setters>
                            < VisualState.StateTriggers>
                                < AdaptiveTrigger MinWindowWidth =3000/>
                            < /VisualState.StateTriggers>
                        < /&的VisualState GT;
                    < / VisualStateGroup>
                < /VisualStateManager.VisualStateGroups>
                < Grid.ColumnDefinitions>
                    < ColumnDefinition WIDTH =自动/>
                    < ColumnDefinition />
                < /Grid.ColumnDefinitions>
                <电网Grid.Column =0X:NAME =headViewLeftWIDTH =100HEIGHT =90>                < /网格和GT;


解决方案

尝试包装你的的DataTemplate 用户控件这样的 -

 <&DataTemplate的GT;
    <&用户控件GT;
        <网格和GT;
            < VisualStateManager.VisualStateGroups>
            ...
        < /网格和GT;
    < /用户控件>
< / DataTemplate中>


看起来像任何控制已经得到了内容属性将正常工作。这就是为什么用户控件的作品,所以做了 ContentControl中

所以,如果你替换用户控件 ContentControl中,并给它一个空的风格。它应该工作了。

 <风格X:键=EmptyContentControlStyle的TargetType =ContentControl中>
    < setter属性=模板>
        < Setter.Value>
            <的ControlTemplate的TargetType =ContentControl中/>
        < /Setter.Value>
    < /二传手>
< /样式和GT;<&DataTemplate的GT;
    < ContentControl中风格={StaticResource的EmptyContentControlStyle}>
        <网格和GT;
            < VisualStateManager.VisualStateGroups>
            ...
        < /网格和GT;
    < / ContentControl中>
< / DataTemplate中>

Will AdaptiveTrigger work in a DataTemplate?

That's my code i'm using to customize my ShellNavigation, it is working fine except the visual states. They will not trigger anything.

<shell:ShellHeadView x:Key="ShellHeadView_01">
    <shell:ShellHeadView.ContentTemplate>
        <DataTemplate>
            <Grid Margin="20,0">
                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroup>
                        <VisualState x:Name="GreenBackgroundVisualState">
                            <VisualState.Setters>
                                <Setter Target="headViewLeft.Background" Value="Green" />
                            </VisualState.Setters>
                            <VisualState.StateTriggers>
                                <AdaptiveTrigger MinWindowWidth="1000"/>
                            </VisualState.StateTriggers>
                        </VisualState>
                        <VisualState x:Name="OrangeBackgroundVisualState">
                            <VisualState.Setters>
                                <Setter Target="headViewLeft.Background" Value="Orange" />
                            </VisualState.Setters>
                            <VisualState.StateTriggers>
                                <AdaptiveTrigger MinWindowWidth="2000"/>
                            </VisualState.StateTriggers>
                        </VisualState>
                        <VisualState x:Name="RedBackgroundVisualState">
                            <VisualState.Setters>
                                <Setter Target="headViewLeft.Background" Value="Red" />
                            </VisualState.Setters>
                            <VisualState.StateTriggers>
                                <AdaptiveTrigger MinWindowWidth="3000"/>
                            </VisualState.StateTriggers>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Grid Grid.Column="0" x:Name="headViewLeft" Width="100" Height="90">

                </Grid>

解决方案

Try wrapping your DataTemplate inside a UserControl like this -

<DataTemplate>
    <UserControl>
        <Grid>
            <VisualStateManager.VisualStateGroups>
            ...
        </Grid>
    </UserControl>
</DataTemplate>


Looks like any Control that has got a Content property will work. That's why UserControl works, so does a ContentControl.

So if you replace the UserControl with a ContentControl and give it an empty Style. It should work too.

<Style x:Key="EmptyContentControlStyle" TargetType="ContentControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl" />
        </Setter.Value>
    </Setter>
</Style>

<DataTemplate>
    <ContentControl Style="{StaticResource EmptyContentControlStyle}">
        <Grid>
            <VisualStateManager.VisualStateGroups>
            ...
        </Grid>
    </ContentControl>
</DataTemplate>

这篇关于AdaptiveTrigger和DataTemplate中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆