无法在带有扩展器的文本框中单击
can't click in a TextBox with an Expander
在 TextBox
上添加 Expander
后,我无法点击原来的 TextBox
。
例如
<Grid Background="Yellow" Focusable="False">
<TextBox Margin="0,20,0,0" Background="Azure" Width="150" Height="30"/>
<Expander Focusable="False">
<Grid Background="White" >
<TextBox Background="LightGreen" Width="150" Height="30"/>
</Grid>
</Expander>
</Grid>
上面的 Azure TextBox 不可点击:我必须在其中制表...
...而绿色的效果很好
编辑
我试图在扩展器中添加错误的焦点
您的 Expander 位于您的 azure TextBox 之上(它们都位于同一单元格 0,0 中的同一网格中),因此无法单击 azure TextBox。如果您通过将 azure TextBox 放在 Expander 之后来更改它们的 z 顺序,那么 azure TextBox 将变得可点击(但它会阻止绿色 TextBox 被点击):
<Grid Background="Yellow" Focusable="False">
<Expander Focusable="False">
<Grid Background="White" >
<TextBox Background="LightGreen" Width="150" Height="30"/>
</Grid>
</Expander>
<TextBox Margin="0,20,0,0" Background="Azure" Width="150" Height="30"/>
</Grid>
如果 2 个文本框彼此重叠,则它们不能被单击。
为了实现您的目标(在展开器展开时访问一个文本框,在展开器折叠时访问另一个文本框),您可以在展开器展开时折叠 azure 文本框。这是一个如何使用触发器执行此操作的示例(或者为了简单起见,您可以在代码中执行此操作):
<Grid Background="Yellow">
<Expander Name="Expander">
<Grid Background="White" >
<TextBox Background="LightGreen" Width="150" Height="30"/>
</Grid>
</Expander>
<TextBox Name="AzureBox" Margin="0,20,0,0" Background="Azure" Width="150" Height="30">
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Expander, Path=IsExpanded}" Value="True">
<Setter Property="TextBox.Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
折叠时展开器的尺寸似乎有问题:展开一定是由其内部内容引起的。
以下 xaml 按预期工作。
<Grid Background="Yellow" Height="290" Width="290">
<TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,0" Background="Azure" Width="150" Height="30"/>
<Expander ExpandDirection="Down"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="5,0,0,0" >
<Grid Background="White" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="290" Width="290">
<TextBox HorizontalAlignment="Center" Margin="0,0,5,45" VerticalAlignment="Center" Background="LightGreen" Width="150" Height="30"/>
</Grid>
</Expander>
</Grid>
在 TextBox
上添加 Expander
后,我无法点击原来的 TextBox
。
例如
<Grid Background="Yellow" Focusable="False">
<TextBox Margin="0,20,0,0" Background="Azure" Width="150" Height="30"/>
<Expander Focusable="False">
<Grid Background="White" >
<TextBox Background="LightGreen" Width="150" Height="30"/>
</Grid>
</Expander>
</Grid>
上面的 Azure TextBox 不可点击:我必须在其中制表...
...而绿色的效果很好
编辑 我试图在扩展器中添加错误的焦点
您的 Expander 位于您的 azure TextBox 之上(它们都位于同一单元格 0,0 中的同一网格中),因此无法单击 azure TextBox。如果您通过将 azure TextBox 放在 Expander 之后来更改它们的 z 顺序,那么 azure TextBox 将变得可点击(但它会阻止绿色 TextBox 被点击):
<Grid Background="Yellow" Focusable="False">
<Expander Focusable="False">
<Grid Background="White" >
<TextBox Background="LightGreen" Width="150" Height="30"/>
</Grid>
</Expander>
<TextBox Margin="0,20,0,0" Background="Azure" Width="150" Height="30"/>
</Grid>
如果 2 个文本框彼此重叠,则它们不能被单击。
为了实现您的目标(在展开器展开时访问一个文本框,在展开器折叠时访问另一个文本框),您可以在展开器展开时折叠 azure 文本框。这是一个如何使用触发器执行此操作的示例(或者为了简单起见,您可以在代码中执行此操作):
<Grid Background="Yellow">
<Expander Name="Expander">
<Grid Background="White" >
<TextBox Background="LightGreen" Width="150" Height="30"/>
</Grid>
</Expander>
<TextBox Name="AzureBox" Margin="0,20,0,0" Background="Azure" Width="150" Height="30">
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Expander, Path=IsExpanded}" Value="True">
<Setter Property="TextBox.Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
折叠时展开器的尺寸似乎有问题:展开一定是由其内部内容引起的。 以下 xaml 按预期工作。
<Grid Background="Yellow" Height="290" Width="290">
<TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,0" Background="Azure" Width="150" Height="30"/>
<Expander ExpandDirection="Down"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="5,0,0,0" >
<Grid Background="White" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="290" Width="290">
<TextBox HorizontalAlignment="Center" Margin="0,0,5,45" VerticalAlignment="Center" Background="LightGreen" Width="150" Height="30"/>
</Grid>
</Expander>
</Grid>