VisualStateManager не работает внутри кнопки.Шаблон содержимого UWP

#xaml #button #uwp #visualstatemanager #contenttemplate

Вопрос:

Я боролся с этим в течение нескольких дней, но теперь не могу найти решение после больших усилий. Это код, в котором я сталкиваюсь с проблемой. ИТАК, у меня есть a ItemsControl , где каждый элемент есть Button , и у каждого Button есть Image и TextBlock . Нависнув над Button ним, я увидел Background Button , что он изменился на Red ожидаемый. Но я не могу изменить значение Foreground TextBlock на Green . Любая помощь в этом отношении высоко ценится

         <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}" />
 

Комментарии:

1. Не могли бы вы, пожалуйста, сказать мне, что вы хотите реализовать? Возможно, есть и другие способы добиться этого вместо использования кнопок.

2. Я хочу показать список из трех приложений одно под другим. Для каждого приложения я хочу показать его изображение и имя приложения. И при наведении приложения я должен иметь возможность изменять фон всего элемента и передний план имени приложения. И при нажатии на приложение я должен иметь возможность запустить его

Ответ №1:

Вам нужно что-то для фактического перехода между визуальными состояниями, состояние перехода указателя не запускается автоматически. Самым простым способом было бы разложить содержимое вашей таблички данных в ее собственный файл (пользовательский элемент управления с разметкой и кодом) и обрабатывать события указателя в коде для перехода между визуальными состояниями с помощью VisualStateManager.ГоТоСтейт.

Вы также можете создать многоразовый «StateTrigger» для перевода любого элемента управления в визуальное состояние «Указатель», но часто какой-то код проще.