سؤال

كيف يمكنني معرفة ما إذا كان DataGridCell موجودًا حاليًا في وضع التحرير (غير المصدر) ، أعني ، على سبيل المثال ، يتم النقر على خلية dataGridTextColumn ، فهي تصبح مربعًا نصًا وليست عبارة عن نصوص نصية ، وهذا ما أسميه iseditMode. أريد ضبط مجموعة الزناد لهذا الوضع.

تعديل:حاولت تعيين نمط عام لـ DataGridcell.ising ولكن لا يبدو أنه يفعل أي شيء.

فيما يلي مقتطف من الكود الحالي:

<Style TargetType="{x:Type tk:DataGridCell}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{x:Null}"/>
        </Trigger>
        <Trigger Property="IsEditing" Value="True">
            <Setter Property="BorderBrush" Value="#FF62B6CC"/>
            <Setter Property="Background" Value="#FFF4F4F4"/>
        </Trigger>
    </Style.Triggers>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="BorderThickness" Value="0.5"/>
    <Setter Property="BorderBrush" Value="{x:Null}"/>
</Style>

شكرًا.

هل كانت مفيدة؟

المحلول

إذا ألقيت نظرة على datagridcell.cs الملف ، يجب أن يكون isediting طريقة جيدة لمعرفة ما إذا كانت الخلية في وضع التحرير. ولكن لا يمكنك تعيين هذه الخاصية من النمط ، لأن هناك تعيين قيمة محلي في فئة DataGridCell (التي لها أولوية أعلى من STYLE STERTER).

لذلك ، ستكون الإجابة هي: يجب أن تعمل من Trigger ، لكنها لن تكون من STYLE STERTER.

تحديث: Shimmy ، إنه يعمل حقًا. Snoop الخاص بك ، تأكد من استخدام DataGridCell نمطك الضمني. حدد DataGridcell في الشجرة ، وتحقق من خاصية الخلفية الخاصة بها. في كل مرة تذهب فيها إلى وضع التحرير ، يتم تحديثه. لكنك لا ترى ذلك بشكل افتراضي ، لأن Textbox لا يرث خاصية الخلفية. لكن هذه قصة أخرى. أعتقد أنه يمكنك تعديل CellEditingTemplate لجعله يعمل.

نصائح أخرى

هيريس كيفية القيام بذلك:

<Trigger Property="IsEditing" Value="True">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridCell">
                <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text, Mode=TwoWay, UpdateSourceTrigger=Default}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Trigger>

ثم نمط مربع النص كما من فضلك

الطريقة المناسبة لتشغيل وضع التحرير هي العثور على DataGridCellوالد DataGrid و اتصل BeginEdit() على ذلك. إذا قمت بتعيينها مباشرة ، فأنت تتجنب الكثير من DataGrid Goo التي تحافظ على انتقالات الحالة المناسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top