باستخدام خصائص التبعية المخصصة كما DataTrigger في WPF
-
18-09-2019 - |
سؤال
لدي خاصية اعتماد مخصصة أود استخدامها كعدرة بيانات. هنا هو الرمز وراء:
public static readonly DependencyProperty BioinsulatorScannedProperty =
DependencyProperty.Register(
"BioinsulatorScanned",
typeof(bool),
typeof(DisposablesDisplay),
new FrameworkPropertyMetadata(false));
public bool BioinsulatorScanned
{
get
{
return (bool)GetValue(BioinsulatorScannedProperty);
}
set
{
SetValue(BioinsulatorScannedProperty, value);
}
}
لقد أنشأت نمط النمط والتحكم. هدفي هو تغيير لون بعض النص عندما يتم تعيين دعامة التبعية إلى True ...
<Style x:Key="TreatEye" TargetType="Label">
<Setter Property="Foreground" Value="#d1d1d1" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="30" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Label">
<Canvas>
<TextBlock x:Name="bioinsulatorText"
Canvas.Left="21" Canvas.Top="33"
Text="Bioinsulator" />
<TextBlock Canvas.Left="21" Canvas.Top="70"
Text="KXL Kit" />
</Canvas>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding BioinsulatorScanned}"
Value="True">
<Setter TargetName="bioinsulatorText"
Property="Foreground" Value="Black" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
على الرغم من إعداد دعامة التبعية بنجاح برمجيا، فإن هذا الشرط الزناد لا يحرر أبدا. هذا ألم حقيقي لتصحيح!
شكرا مقدما.
المحلول
يبدو أن خاصية التبعية الخاصة بك محددة داخل DisposableDisplay
الكائن الذي قمت بإنشائه. من أجل الملزمة المحددة للعمل، مثيل ذلك DisposableDisplay
يجب تعيين الكائن كما DataContext
من عنصر التحكم (التسمية في هذه الحالة) أو أي من أسلافها.
نصائح أخرى
في هذه الحالة، أقوم بتبديل رؤية زر باستخدام DataTrigger بناء على خاصية التبعية Firstlevreproperty.
public static readonly DependencyProperty FirstLevelProperty = DependencyProperty.Register("FirstLevel", typeof(string), typeof(MyWindowClass));
public string FirstLevel
{
get
{
return this.GetValue(FirstLevelProperty).ToString();
}
set
{
this.SetValue(FirstLevelProperty, value);
}
}
يمكنك الرجوع إلى خاصية التبعية FirstLevel(Property)
الواردة (في هذه الحالة) في نافذة باستخدام RelativeSource
ربط. كما يجب عليك تعيين الإعداد الافتراضي في النمط، وسيتم تجاوزه بواسطة DataTrigger.
<Button.Style>
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=FirstLevel,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}}"
Value="SomeValue">
<Setter Property="Visibility"
Value="Hidden" />
</DataTrigger>
</Style.Triggers>
<Setter Property="Visibility" Value="Visible" />
</Style>
</Button.Style>