嵌入TabControl中的自定义用户控件执行操作时更改TabControl的属性
本文关键字:TabControl 操作 属性 控件 自定义 用户 嵌入 执行 | 更新日期: 2023-09-27 18:25:03
所以,想象一下情况。。。
我有一个主窗口,里面有一个名为TabControl1的TabControl。TabControl由2个"选项卡"组成。
第一个选项卡包含我的一个自定义用户控件FruitForm的实例化,这个特定的实例化被命名为FruitForm1。
同样,第二个选项卡包含我的另一个自定义用户控件VegForm的实例化,这个特定的实例化被命名为VegForm1。
为了让您了解FruitForm和VegForm 我没有足够的代表在我的问题中嵌入图像:( 我还有两个名为FruitValidation和VegValidation验证类,它们基本上由简单的公共静态方法组成,根据输入字符串是否符合简单标准,返回true或false。例如,考虑"FruitValidation.validateApp()"方法: 我还有一个静态的IconLoader类,它本质上是一个包装器,允许我轻松地将所需图标的源属性更改为Tick或Cross。例如,如果我想将Banana文本框旁边的图标(见上图)更改为Tick,那么我会编写以下代码: 每次在特定的文本框中更改文本时,我都会验证文本框的内容是否与所需值匹配。如果是,我会将图标设置为勾选,否则会显示十字。 这张图片应该澄清我在上一段中所描述的内容。 现在本质上这就是问题: 当相应UserControl中的所有文本框都有效时(即,每个文本框旁边都有一个Tick),我如何将标题中的图像更改为Tick?我还希望从UserControl内部触发此特定事件,UserControl当前不知道TabControl1的存在 我还应该指出,如果其中一个文本字段变为无效(在某个时刻一度有效之后),相应的Tab标题应该反映这一点-通过显示Crosspublic static bool validateApple(string apple)
{
if (apple == null) return false;
if (apple.ToUpper() == "APPLE") return true;
else return false;
}
imageBanana.Source = IconLoader.GetTick();
//setting it back to a cross...
imageBanana.Source = IconLoader.GetCross();
为了回答您的问题:最简单的方法是在UserControls上定义一个依赖属性,该属性将指示验证结果,然后将您的选项卡项绑定到它。例如:
public static readonly DependencyProperty IsValidProperty = DependencyProperty.Register("IsValid", typeof (bool), typeof (VegForm));
public bool IsValid
{
get { return (bool) GetValue(IsValidProperty); }
set { SetValue(IsValidProperty, value); }
}
<TabItem>
<TabItem.Header>
<Image>
<Image.Style>
<Style TargetType="Image">
<!-- Replace "..." with valid "tick" image source -->
<Setter Property="Source" Value="..."/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsValid, ElementName=VegForm}" Value="False">
<!-- Replace "..." with valid "cross" image source -->
<Setter Property="Source" Value="..."/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</TabItem.Header>
<VegForm x:Name="VegForm"/>
</TabItem>
然而,如果你的目标是学习wpf,那么在它进一步发展之前,你应该摆脱这种Windows.Forms
心态。因为通常情况下您不需要此代码。阅读一些关于WPF中MVVM模式的文章是一个良好的开端。
WPF还有一个内置验证。你也应该读一下。在你最终重新发明轮子之前。