Нужен совет по получению визуальных состояний для полноценной работы в исходном коде

#vb.net #uwp

#vb.net #uwp

Вопрос:

В моем приложении UWP я создаю все элементы управления в исходном коде (вообще без XAML). Нужно заставить мое приложение реагировать на изменение размера окна. Наткнулся на визуальные состояния и пытаюсь протестировать изменение цвета фона моего элемента управления Grid в данный момент в зависимости от ширины окна. Это то, что у меня есть до сих пор, но ничего не происходит:

 Dim visualStates = New VisualStateGroup()
Dim horiVisualState = New VisualState()

horiVisualState.Setters.Add(New Setter() With {.Target = New TargetPropertyPath(BackgroundProperty) With {.Target = grid2}, .Value = New SolidColorBrush(Windows.UI.Colors.Orange)})

horiVisualState.StateTriggers.Add(New AdaptiveTrigger() With {.MinWindowWidth = 800})

visualStates.States.Add(horiVisualState)
VisualStateManager.GetVisualStateGroups(Me).Add(visualStates)
  

grid2 — это сетка, которая является дочерней по отношению к другой сетке, «Я» относится к основной сетке.

Ответ №1:

Вам нужно убедиться, что сетка ‘Me’ является корневой панелью всех других дочерних элементов пользовательского интерфейса на странице XAML, как показано ниже:

 <Page
x:Class="AppAdaptive.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:AppAdaptive"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

<Grid x:Name="Me">
</Grid>
  

 Dim grid2 As Grid = New Grid() With {.Width = 200, .Background = New SolidColorBrush(Colors.Black)}
[Me].Children.Add(grid2)
Dim visualStateGroup = New VisualStateGroup()
Dim horiVisualState = New VisualState()
horiVisualState.Setters.Add(New Setter() With {.Target = New TargetPropertyPath() With {.Target = grid2, .Path = New PropertyPath("Background")}, .Value = New SolidColorBrush(Windows.UI.Colors.Orange)})
horiVisualState.StateTriggers.Add(New AdaptiveTrigger() With {.MinWindowWidth = 800})
visualStateGroup.States.Add(horiVisualState)
VisualStateManager.GetVisualStateGroups(Me).Add(visualStateGroup)
  

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

1. Итак, я получил верхнюю сетку, которая была создана в коде и использовалась при добавлении группы визуальных состояний. К сожалению, все еще не работает. grid2 не является прямым дочерним элементом этой верхней сетки, это немного далеко по линии.

2. @AaronBoclet Если вы используете мой код для тестирования, работает ли он?

3. Я создал новый тестовый проект с вашим кодом и не могу заставить его работать.

4. @AaronBoclet Извините, я не знаком с vb.net Я просто без проблем тестирую код c #, а затем конвертирую его в vb.net код. Пожалуйста, измените код этой строки horiVisualState.Setters.Add(New Setter() With {.Target = New TargetPropertyPath() With {.Target = grid2, .Path = New PropertyPath("Background")}, .Value = New SolidColorBrush(Windows.UI.Colors.Orange)}) . Я обновил приведенный выше ответ.

5. все в порядке, и я изменил свой код, но, к сожалению, по-прежнему безуспешно. Возможно, я чего-то еще не понимаю.