2

ほぼ同じ内容の別の質問を見つけたので、この質問は時々尋ねられたと確信しています。しかし、それらすべてのページを使用して理解しようとすると、行き詰まります...これが私がやろうとしていることです。ファイルを選択し、ファイルへのパスをテキストボックスに表示するユーザーコントロールを作成しました。HTML と同様 (input type=file)。それはすべてうまく機能し、期待どおりです。しかし、トリガー (FilePathIsValid) を使用してテキスト ボックスの色を変更しようとすると、うまくいきません。上記のように、依存関係プロパティはすべて正常に機能します。しかし、スタイルはテキストボックスに割り当てられていません。これが私の XAML です - 誰が私が間違っているのか教えてもらえますか? (コード ビハインドhere、必要に応じて)

<UserControl x:Class="Project.Controls.SelectFileBox"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:Controls="clr-namespace:Project.Controls"
         x:Name="ThisUserControl"
         mc:Ignorable="d" d:DesignHeight="30" d:DesignWidth="300">
<UserControl.Resources>
    <!-- This does not work... -->
    <Style TargetType="{x:Type Controls:SelectFileBox}">
        <Style.Triggers>
            <Trigger Property="FilePathIsValid" Value="false">
                <Setter Property="TextBoxBorderColor" Value="red"/>
            </Trigger>
        </Style.Triggers>
    </Style>
    <!-- Neither does this: FilePathIsValid can't be found -->
    <Style TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="FilePathIsValid" Value="false">
                <Setter Property="BorderBrush" Value="red"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="100"/>
    </Grid.ColumnDefinitions>
    <TextBox Grid.Column="0" Margin="3" IsEnabled="{Binding ElementName=ThisUserControl,Path=TextBoxIsEnabled}" Text="{Binding ElementName=ThisUserControl,Path=FilePath}" BorderThickness="{Binding ElementName=ThisUserControl, Path=TextBoxBorderThickness}"/>
    <Button Grid.Column="1" Margin="0,3,3,3" Content="{Binding ElementName=ThisUserControl, Path=ButtonText}" Click="SelectFileClick"/>
</Grid>

4

2 に答える 2

1

わかりました、コードビハインドを見て問題を理解しました。

BorderBrush以下のように TextBoxのプロパティにバインドを追加して、適切なBorderBrush適用を行うだけです。

BorderBrush="{Binding ElementName=ThisUserControl, Path=TextBoxBorderColor}"

TextBox 要素の完全な XAML:

<TextBox Grid.Column="0" Margin="3" 
         IsEnabled="{Binding ElementName=ThisUserControl,Path=TextBoxIsEnabled}"
         Text="{Binding ElementName=ThisUserControl,Path=FilePath}" 
         BorderThickness="{Binding ElementName=ThisUserControl, Path=TextBoxBorderThickness}" 
         BorderBrush="{Binding ElementName=ThisUserControl, Path=TextBoxBorderColor}"/>

私は試してテストしました。以下はスクリーンショットです

サンプル出力

別の方法:

ボーダーブラシを変更するためのスタイルTextBoxとデータ トリガーを設定できます。

<Style TargetType="TextBox">
       <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=ThisUserControl, 
                         Path=FilePathIsValid}" Value="False">
                  <Setter Property="BorderBrush" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
</Style>

このアプローチでは、 のプロパティのスタイルSelectFileBoxとバインディングは必要ありません。BorderBrushTextBox

于 2013-10-27T10:04:31.860 に答える
0

私が正しく理解している場合、パスが無効な場合は textBoxbroder を赤に設定し、コードを次のように変更します

<Style TargetType="{x:Type TextBox}">
    <Style.Triggers>
        <Trigger Property="FilePathIsValid" Value="false">
            <Setter Property="BorderBrush" Value="red"/>
        </Trigger>
    </Style.Triggers>
</Style>
于 2013-10-27T09:31:22.863 に答える