#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. все в порядке, и я изменил свой код, но, к сожалению, по-прежнему безуспешно. Возможно, я чего-то еще не понимаю.