سؤال

مرحبا، أحاول أن أكتب dataTrigger الذي يجب أن أوضح محتوى مربع النص على مربع الاختيار.

يعمل طالما أنك لا تكتب أي شيء في TextBox.as قريبا كما اكتب في مربع النص فشل DataTrigger في العمل. كيف يمكنني حل هذا

<Window x:Class="CheckboxTextbox.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Window.Resources>
        <Style x:Key="cbStyle" TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=Chk,Path=IsChecked}" Value="True">
                    <Setter Property="Text" Value="{x:Null}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <StackPanel>
        <CheckBox Name="Chk" Content="test"/>
        <TextBox Style="{StaticResource cbStyle}">

        </TextBox>
    </StackPanel>
</Window>
هل كانت مفيدة؟

المحلول

على عكس الرسوم المتحركة التي يمكن أن "تعقد" خاصية التبعية بقيمة محددة بمجرد انتهاء الرسوم المتحركة، يقوم DataTrigger بتعيين الخاصية الهدف ثم يتم ذلك حتى تتغير الخاصية المصدر.

بمعنى آخر، في مثالك إذا وضعت بعض النص في مربع النص، ثم حدد المربع، وسيتم مسح النص. ولكن بعد ذلك، إذا بدأت في الكتابة في مربع النص مرة أخرى، فلن يقوم DataTrigger بفعل أي شيء حتى يتغير مربع الاختيار مرة أخرى. لهذا السبب عند إلغاء تحديد المربع وإعادة التحقق من المربع، يتم مسح النص مرة أخرى.

إذن ما قد ترغب في القيام به هو في DataTrigger الخاص بك، قم بتعيين الخاصية Isreadonly في مربع النص إلى True. هذا سيمنعك من الكتابة في المربع أثناء نشط Datatrigger.

<DataTrigger Binding="{Binding ElementName=Chk,Path=IsChecked}" Value="True">
    <Setter Property="Text" Value="{x:Null}"/>
    <Setter Property="IsReadOnly" Value="True"/>
</DataTrigger>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top