datagridcell.iseditmode؟
-
21-09-2019 - |
سؤال
كيف يمكنني معرفة ما إذا كان 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 التي تحافظ على انتقالات الحالة المناسبة.