我在扩展器中有两个文本框。单击按钮时,我正在验证文本框的文本值。如果文本框为空,则为文本框提供焦点。
我要实现的是让扩展器在其中一个texbox集中时自动扩展。
我在互联网上找不到任何方法可以做到这一点。有可能这样做吗?
xaml:
<Grid>
<Expander Header="Textbox Expander">
<StackPanel Orientation="Vertical">
<TextBox Name="txtName" Height="30" Width="100" Background="WhiteSmoke" />
<TextBox Name="txtAge" Height="30" Width="100" Background="WhiteSmoke" />
</StackPanel>
</Expander>
<Button Name="btnDone" Content="Done" Width="50" Height="50" Click="btnDone_Click"/>
</Grid>
c#:
using System.Windows;
using System.Windows.Controls;
namespace TestExpanderFocus
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnDone_Click(object sender, RoutedEventArgs e)
{
Validation validation = new Validation();
if(validation.validate(ref txtName) && validation.validate(ref txtAge))
{
//Do Something.
}
}
}
}
编辑:由于此验证类在另一个应用程序中,因此我无法对其进行编辑。
//Seperate class in another application which cannot be edited
public class Validation
{
public bool validate(ref TextBox txtobj)
{
if (string.IsNullOrWhiteSpace(txtobj.Text))
{
MessageBox.Show("Please Enter Data..!");
txtobj.Focus();
return false;
}
return true;
}
}
答案 0 :(得分:1)
您想要实现的实际上很简单。 首先给扩展器起一个名字
<Expander x:Name="MyExpander" ... />
第二,在验证之前,在专注于文本框之前,只需展开扩展器
MyExpander.IsExpanded = true;
...
-编辑以满足新要求-
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btnDone_Click(object sender, RoutedEventArgs e)
{
Validation validation = new Validation();
// since you know that the text will be focused when the validation fails
var result1 = validation.validate(ref txtName);
var result2 = validation.validate(ref txtAge);
MyExpander.IsExpanded = !result1 || !result2;
if(result1 && result2)
{
//Do Something.
}
}
}
但是我必须承认,这不是最好的解决方案。应该有一种更简单的方法,直接将Trigger添加到Expander Style。 (由于没有更多时间,我会将其留给其他人使用)