0

我正在开发一个 WPF 应用程序。我想通过单击文本框来更改 WPF 应用程序中网格的可见性。当我更改网格的可见性时,文本框会闪烁。

闪烁的原因是什么?如何避免闪烁?

主窗口.xaml

<Window x:Class="ChangeVisibility.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ChangeVisbility" ResizeMode="NoResize" SizeToContent="WidthAndHeight" WindowStartupLocation="CenterScreen">
    <Window.Resources>
        <Style x:Key="TextBox" TargetType="{x:Type TextBox}">
            <Setter Property="Background" Value="#FF646464"/>
            <Setter Property="Foreground" Value="#FFFFFFFF"/>
            <Setter Property="BorderThickness" Value="0"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="Padding" Value="5,4,5,0"/>
            <Setter Property="UseLayoutRounding" Value="True"/>
            <Setter Property="FontFamily" Value="Arial"/>
            <Setter Property="FontSize" Value="22"/>
            <Setter Property="IsReadOnly" Value="True"/>
            <Setter Property="TextOptions.TextRenderingMode" Value="Grayscale"/>
            <Setter Property="Focusable" Value="False"/>
            <Setter Property="Cursor" Value="Arrow"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Background" Value="#FF9B9B9B"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <Grid Name="Grid1" Width="256" Height="128" Background="#FFFFFFFF">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <TextBox Text="Input" MouseUp="Change" Grid.Row="2" Grid.RowSpan="1" Grid.Column="1" Grid.ColumnSpan="2" Style="{StaticResource TextBox}"/>
        </Grid>
        <Grid Name="Grid2" Width="256" Height="128" Background="#FFFFFFFF">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <TextBox Text="Output" MouseUp="Change" Grid.Row="2" Grid.RowSpan="1" Grid.Column="1" Grid.ColumnSpan="2" Style="{StaticResource TextBox}"/>
        </Grid>
    </Grid>
</Window>

主窗口.xaml.cs

using System.Windows;

namespace ChangeVisibility
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Change(object sender, RoutedEventArgs e)
        {
            if (Grid1.Visibility == Visibility.Visible)
            {
                Grid1.Visibility = Visibility.Hidden;
                Grid2.Visibility = Visibility.Visible;
            }
            else
            {
                Grid1.Visibility = Visibility.Visible;
                Grid2.Visibility = Visibility.Hidden;
            }
        }
    }
}
4

1 回答 1

0

我猜,是因为你的文本框样式。如您所见,您正在更改鼠标悬停时的背景颜色,只要可见性代码触发,鼠标位置就会更改,背景颜色将再次更改。

尝试为“IsMouseOver = False”设置背景颜色

 <Trigger Property="IsMouseOver" Value="False">
                <Setter Property="Background" Value="#FF9B9B9B"/>
  </Trigger>
于 2019-07-17T20:54:51.093 回答