0

经过几天的努力,我一直在为此苦苦挣扎,现在无法找到解决方案。这是我面临问题的代码。所以我有一个ItemsControl每个元素在哪里,每个元素Button都有Button一个ImageTextBlock。悬停在Button我可以看到Background按预期Button更改为。Red但我无法将Foregroundof更改TextBlockGreen。非常感谢这方面的任何帮助

        <ControlTemplate x:Key="ButtonTemplate" TargetType="ContentControl">
            <Grid Background="Transparent" x:Name="Mini">
                <VisualStateManager.VisualStateGroups>
                    <VisualStateGroup x:Name="CommonStates">
                        <VisualState x:Name="PointerOver">
                            <VisualState.Setters>
                                <Setter Target="Mini.Background" Value="Red" />
                            </VisualState.Setters>
                        </VisualState>
                    </VisualStateGroup>
                </VisualStateManager.VisualStateGroups>
                <ContentPresenter x:Name="MiniContent" />
            </Grid>
        </ControlTemplate>

            <DataTemplate x:Key="ListItemTemplate" x:DataType="local:DataModel">
            <Button
                Template="{StaticResource ButtonTemplate}">
                <Button.ContentTemplate>
                    <DataTemplate x:DataType="local:DataModel">
                      <UserControl>
                        <Grid >
                           <VisualStateManager.VisualStateGroups>
                              <VisualStateGroup x:Name="CommonStates">
                                <VisualState x:Name="PointerOver">
                                    <VisualState.Setters>
                                      <Setter Target="Value.Foreground" Value="Green" />
                                    </VisualState.Setters>
                               </VisualState>
                             </VisualStateGroup>
                          </VisualStateManager.VisualStateGroups>
                            <TextBlock x:Name="Value"
                                Foreground="Yellow" 
                                Text="{x:Bind DisplayName, Mode=OneWay}"/>
                            <Image
                                Width="16"
                                Source="{x:Bind ImageBitmap, Mode=OneWay}"/>
                        </Grid>
                       </UserControl>

                    </DataTemplate>
                </Button.ContentTemplate>
            </Button>
        </DataTemplate>

       
        <ItemsControl
        ItemTemplate="{StaticResource ListItemTemplate}"
        ItemsSource="{x:Bind DataModelVector, Mode=OneWay}" />
4

1 回答 1

0

您需要在 VisualStates 之间进行实际转换,PointerOver 状态不会自动触发。最简单的方法是将 DataTemplate 的内容分解到它自己的文件(带有标记和代码隐藏的用户控件)中,并在代码中处理指针事件,以使用 VisualStateManager.GoToState 在视觉状态之间进行转换。

您还可以创建一个可重用的“StateTrigger”,用于将任何控件转换为“PointerOver”视觉状态,但通常一些代码隐藏更简单。

于 2021-10-27T15:58:10.700 回答