首页 > 解决方案 > 单击按钮时,如何防止 TextBox 的“IsFocus”属性变为“false”...?

问题描述

我的 mvvm 项目有问题。我想为每个文本框输入一个值,我怎么知道要为哪个文本框输入一个值?我使用背景来知道哪个文本框是焦点。比如我想在textbox1中输入值12,我会点击textbox1然后点击button1和button2,textBox1的“content”属性会是12,(注意我没有使用编辑光标,我有很多文本框)。但是当按下按钮时,文本框的“IsFocus”属性更改为“false”(我认为)。(我刚开始,我的英语不是那么好)。这是我的 xaml 代码。

<Window x:Class="ListViewWPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:ListViewWPF"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
<Window.Resources>
    <Style x:Key="RedTextBoxStyle" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="true">
                <Setter Property="Background" Value="RosyBrown"/>
                <Setter Property="IsReadOnly" Value="True"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition ></ColumnDefinition>
        <ColumnDefinition ></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <ListView x:Name="DataView" ItemsSource="{Binding Mydata}" SelectedItem="{Binding SelectedItems}" Margin="0,0,0,73.667" Grid.RowSpan="2">
    </ListView>
    <TextBox Text="TextBoxA" Style="{StaticResource RedTextBoxStyle}" FontSize="25" Grid.Row="0" Grid.Column="1" Margin="20"></TextBox>
    <TextBox Text="TextBoxB" Style="{StaticResource RedTextBoxStyle}" FontSize="25" Grid.Row="1" Grid.Column="1" Margin="20"></TextBox>
    
    <Button Grid.Row="0" Grid.Column="2" Margin="20" Content="1" FontSize="25"></Button>
    <Button Grid.Row="1" Grid.Column="2" Margin="20" Content="2" FontSize="25"></Button>
</Grid>
</Window>

我希望收到您的意见!

在此处输入图像描述

标签: c#wpfmvvm

解决方案


我不确定我是否完全理解您的要求,但是:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition ></ColumnDefinition>
        <ColumnDefinition ></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <ListView x:Name="DataView" ItemsSource="{Binding Mydata}" SelectedItem="{Binding SelectedItems}" Margin="0,0,0,73.667" Grid.RowSpan="2">
    </ListView>
    <StackPanel Grid.Row="0" Grid.Column="1" FocusManager.IsFocusScope="True">
        <TextBox Text="TextBoxA" Style="{StaticResource RedTextBoxStyle}" FontSize="25" Grid.Row="0" Grid.Column="1" Margin="20"></TextBox>
        <TextBox Text="TextBoxB" Style="{StaticResource RedTextBoxStyle}" FontSize="25" Grid.Row="1" Grid.Column="1" Margin="20"></TextBox>
    </StackPanel>
    <Button Grid.Row="0" Grid.Column="2" Margin="20" Content="1" FontSize="25"></Button>
    <Button Grid.Row="1" Grid.Column="2" Margin="20" Content="2" FontSize="25"></Button>
</Grid>

这里的想法是创建焦点范围,即逻辑焦点遍历的范围。换句话说,如果您希望在按钮接收焦点时保持其中一个文本框保持焦点,则:文本框和按钮必须属于不同的焦点范围。

它回答了你的担忧吗?


推荐阅读