C# 触发器上的控件中的样式控件

C# 触发器上的控件中的样式控件,c#,wpf,validation,xaml,triggers,C#,Wpf,Validation,Xaml,Triggers,我的WPF应用程序中有一个标签文本框,非常简单: <Grid x:Name="root"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> </Grid.RowDefinitions> <TextBlock Grid.Row="0"

我的WPF应用程序中有一个
标签文本框
,非常简单:

<Grid x:Name="root">

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <TextBlock Grid.Row="0"
               Text="{Binding Label}"
               FontWeight="Bold"
               VerticalAlignment="Bottom"
               Margin="5,2,5,0"/>

    <TextBox Grid.Row="1"
             Text="{Binding Text}"
             VerticalAlignment="Top"
             Margin="5,0,5,2"/>
</Grid>
这一切都有效,整个控件以红色边框(显然)。我想做的是在
标签文本框
中操纵
文本框
,我的最终目标是将背景更改为柔和的红色

当在整个
标签文本框
上设置触发器时,如何从触发器内访问我的
文本框

我想这是一个看似简单的任务,我只是无法正确理解语法。我在.NET4.0环境中工作,如果相关的话

谢谢

  • 向用户控件添加依赖项属性
  • TextBlock
    Background
    属性绑定到该依赖项属性
  • 在触发器中更改该属性

  • 您好,我不认为我们可以通过样式访问元素,但可以通过ControlTemplate.Triggers引用,并在Setter中指定TargetName属性

    <Style TargetType="{x:Type wpfApplication4:LabelledTextBox}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type wpfApplication4:LabelledTextBox}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <TextBlock
                                Grid.Row="0"
                                Margin="5,2,5,0"
                                VerticalAlignment="Bottom"
                                FontWeight="Bold"
                                Text="ergergergegr" />
    
                            <TextBox
                                x:Name="MyTextBox"
                                Grid.Row="1"
                                Margin="5,0,5,2"
                                VerticalAlignment="Top"
                                Text="gtwererggerg" />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter TargetName="MyTextBox" Property="BorderBrush" Value="Red"/>
                                <Setter TargetName="MyTextBox"  Property="BorderThickness" Value="5"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    

    这很有道理。我确信有一种更简单的方法可以单独将其设置为XAML
    <Style TargetType="{x:Type wpfApplication4:LabelledTextBox}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type wpfApplication4:LabelledTextBox}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto" />
                                <RowDefinition Height="Auto" />
                            </Grid.RowDefinitions>
                            <TextBlock
                                Grid.Row="0"
                                Margin="5,2,5,0"
                                VerticalAlignment="Bottom"
                                FontWeight="Bold"
                                Text="ergergergegr" />
    
                            <TextBox
                                x:Name="MyTextBox"
                                Grid.Row="1"
                                Margin="5,0,5,2"
                                VerticalAlignment="Top"
                                Text="gtwererggerg" />
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsMouseOver" Value="true">
                                <Setter TargetName="MyTextBox" Property="BorderBrush" Value="Red"/>
                                <Setter TargetName="MyTextBox"  Property="BorderThickness" Value="5"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>