Стиль по умолчанию UWP для пограничного контроля - PullRequest
0 голосов
/ 12 марта 2020

Где можно найти стиль по умолчанию UWP для пограничного контроля?

Я пытаюсь изменить стиль по умолчанию, чтобы onmouseover изменил цвет фона.

Обычно вы можете найти стили по умолчанию здесь:

C: \ Program Files (x86) \ Windows Kits \ 10 \ DesignTime \ CommonConfiguration \ Neutral \ UAP \ 10.0.18362.0 \ Generic \ generi c .xaml

Однако я не могу найти стиль по умолчанию для класса границы.

1 Ответ

1 голос
/ 13 марта 2020

Если вы хотите изменить цвет фона Border при наведении мыши, вы можете использовать VisualStateManager, чтобы изменить его. Вам нужно вызвать метод VisualStateManager.GoToState() в коде в ответ на событие PointerEnter и активировать «PointerOver» в визуальном состоянии. Кроме того, состояния VisualStateManager обычно применяются к элементам управления (производным от Windows .UI.Xaml.Control.Controls), но Border не является производным от Control. Так что лучше поместить Border в пользовательский контроль. Например:

MainPage.xaml:

<Grid>
    <UserControl PointerEntered="Border_PointerEntered" PointerExited="Border_PointerExited" x:Name="MyControl">
        <Border x:Name="MyBorder" Height="30" VerticalAlignment="Top" Margin="50,0" Background="Red">
            <VisualStateManager.VisualStateGroups>
                <VisualStateGroup x:Name="CommonStates">
                    <VisualState x:Name="Normal">
                        <VisualState.Setters>
                            <Setter Target="MyBorder.Background" Value="Red"></Setter>
                        </VisualState.Setters>
                    </VisualState>
                    <VisualState x:Name="PointerOver">
                        <VisualState.Setters>
                            <Setter Target="MyBorder.Background" Value="Green"></Setter>
                        </VisualState.Setters>
                    </VisualState>
                </VisualStateGroup>
            </VisualStateManager.VisualStateGroups>
        </Border>
    </UserControl>
</Grid>

MainPage.xaml.cs:

private void Border_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    VisualStateManager.GoToState(MyControl, "PointerOver", false);
}

private void Border_PointerExited(object sender, PointerRoutedEventArgs e)
{
    VisualStateManager.GoToState(MyControl, "Normal", false);
}

Обновление:

Вы можете напрямую подписаться на события PointerEntered и PointerExited в Border, а затем изменить фон в этих событиях без использования userControl.

.xaml:

<Grid>
    <Border x:Name="MyBorder" Height="30" VerticalAlignment="Top" Margin="50,0" Background="Red" PointerEntered="Border_PointerEntered" PointerExited="Border_PointerExited">
    </Border>
</Grid>

.cs:

private void Border_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    MyBorder.Background = new SolidColorBrush(Colors.Green);
}

private void Border_PointerExited(object sender, PointerRoutedEventArgs e)
{
    MyBorder.Background = new SolidColorBrush(Colors.Red);
}
...