-4

実行時に生成される多数の TextBox があります。特定のアクションが実行されたときにボーダーブラシの色を緑に設定し、ボーダーの太さを変更したいと思います。私の場合、これは分離コードから行う必要があります。

私の最初の課題は、マウスでホバーしたときに TextBox の境界線の色が変わらないようにすることでした。これは、次のスタイルを追加することで実現されました。

<UserControl.Resources>
        <Style TargetType="TextBox">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="True"/>
            <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
            <Setter Property="AllowDrop" Value="true"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type TextBoxBase}">
                        <Border 
          Name="Border"
          Padding="1"
          Background="#FFFFFF"
          BorderBrush="#888888"
          BorderThickness="1" >
                            <ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsEnabled" Value="False">
                                <Setter TargetName="Border" Property="Background" Value="#EEEEEE"/>
                                <Setter TargetName="Border" Property="BorderBrush" Value="#EEEEEE"/>
                                <Setter Property="Foreground" Value="#888888"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style TargetType="TreeViewItem">
            <Setter Property="Template" Value="{StaticResource TreeViewWithLines}"/>
            <Setter Property="Padding" Value="0,5,0,5"/>
            <Setter Property="IsExpanded" Value="true"/>
        </Style>
    </UserControl.Resources>
    <ScrollViewer ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto">
        <TreeView Name="tvFilters" Margin="0,10,0,10" Background="White" BorderBrush="White"/>
    </ScrollViewer>
</UserControl>

上記のコードは、私の UserControl 用です。

次に、新たな問題が発生し始めました。コード ビハインド メソッド内で BorderBrush および BorderThickness プロパティを手動で変更しようとすると、まったく何も起こりません。これはコードです:

txt.BorderThickness = new Thickness(3);
txt.BorderBrush = Brushes.Green;

何か案は?

4

1 に答える 1

1

コントロールテンプレートとしてこれを試してください:

<ControlTemplate TargetType="{x:Type TextBoxBase}">
     <Border 
      Name="Border"
      Padding="1"
      Background="#FFFFFF"
      BorderBrush="{TemplateBinding BorderBrush}"
      BorderThickness="{TemplateBinding BorderThickness}" >
                        <ScrollViewer Margin="0" x:Name="PART_ContentHost"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="Border" Property="Background" Value="#EEEEEE"/>
                            <Setter TargetName="Border" Property="BorderBrush" Value="#EEEEEE"/>
                            <Setter Property="Foreground" Value="#888888"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>

おそらく 2 つを比較することで推測できます。ビジュアル サブツリーBorder用に生成されたの値をハード コーディングしています。TextBoxこれを処理する方法は、ビジュアルのプロパティ値をコントロールのプロパティの値にバインドすることです。TemplateBindingこれを行うために作成されました。

また、私はあなたに答えを提供しましたが、実際にはその設計を最大限に活用する方法で WPF を使用していないことに注意してください。実行時にコントロールを生成するには、DataTemplate.

于 2013-02-20T17:54:02.150 に答える