第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

觸發(fā)器設(shè)置器在更改后不會(huì)為 DependencyProperty 設(shè)置新值

觸發(fā)器設(shè)置器在更改后不會(huì)為 DependencyProperty 設(shè)置新值

C#
慕萊塢森 2023-05-13 15:45:48
我真的試圖找到解決方案,但我失敗了。所以我在單獨(dú)的 xaml 文件中有 ResourceDictionary,在另一個(gè) cs 文件中有 Control 類。這是 xaml 代碼:<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"                    xmlns:local="clr-namespace:WpfApp1" x:Class="Control1">    <Style TargetType="{x:Type local:Control1}">        <Setter Property="GridColor" Value="Red"/>        <Setter Property="Template">            <Setter.Value>                <ControlTemplate TargetType="{x:Type local:Control1}">                    <Grid>                        <Grid.ColumnDefinitions>                            <ColumnDefinition/>                            <ColumnDefinition/>                        </Grid.ColumnDefinitions>                        <Grid x:Name="PART_Grid" Background="{TemplateBinding GridColor}"                               Height="{TemplateBinding Height}" Width="{TemplateBinding Width}"/>                        <Button Grid.Column="1" x:Name ="PART_Button" Width="50" Height="50"/>                    </Grid>                    <ControlTemplate.Triggers>                        <Trigger Property="IsChecked" Value="True">                            <Setter Property="GridColor" Value="Black"/>                        </Trigger>                    </ControlTemplate.Triggers>                </ControlTemplate>            </Setter.Value>        </Setter>    </Style></ResourceDictionary>在 cs 文件中,我更改了IsChecked事件處理OnMouseEnter程序OnMouseLeave。它工作正常。問(wèn)題是,例如,當(dāng)我更改事件處理GridColor程序OnButtonClick時(shí),它會(huì)更改,但之后觸發(fā)器設(shè)置器不起作用(但另一個(gè)設(shè)置器仍然可以正常工作)。沒(méi)有例外,輸出中沒(méi)有消息。我錯(cuò)過(guò)了什么?
查看完整描述

1 回答

?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

您似乎遇到了依賴屬性值優(yōu)先級(jí)的問(wèn)題:在我看來(lái),您正在點(diǎn)擊處理程序中設(shè)置本地值(鏈接優(yōu)先級(jí)列表中的#3),并且覆蓋了控件模板設(shè)置的值觸發(fā)器(優(yōu)先列表中的#4a)。

您唯一想要混合優(yōu)先級(jí)的情況是當(dāng)您明確想要替換以默認(rèn)樣式或基類或類似性質(zhì)完成的內(nèi)容時(shí)。

但是您的方法無(wú)論如何都不是最好的主意:理想情況下,您編寫 WPF 控件就像一個(gè)無(wú)法訪問(wèn)源代碼的陌生人將不得不編寫默認(rèn)樣式和默認(rèn)模板一樣。然后你像陌生人一樣編寫你的默認(rèn)模板。模板可能需要知道的任何內(nèi)容都應(yīng)該清楚地公開(kāi)為屬性。

這并不總是可行的,但我將演示如何在這種情況下做到這一點(diǎn)。

藍(lán)色畫筆表示一種狀態(tài):按鈕已被點(diǎn)擊。該狀態(tài)未顯式存儲(chǔ)或暴露在任何地方,它只是隱含在屬性的值中GridColor(您實(shí)際上應(yīng)該將其命名為GridBrushor?GridBackground,因?yàn)樗皇?code>Color)。

因此,讓我們?yōu)樵摖顟B(tài)添加一個(gè)只讀依賴屬性,并將有關(guān)畫筆顏色的決定推到它所屬的模板中。這真的很強(qiáng)大,因?yàn)槿绻阆胱屢恍┬值芸丶鶕?jù)我們的狀態(tài)改變它的HasBeenClicked狀態(tài),你可以只在父視圖中添加一個(gè)綁定。

HasBeenClicked如果您希望控件的使用者能夠以編程方式或通過(guò)綁定更改該狀態(tài),您還可以創(chuàng)建一個(gè)常規(guī)的讀/寫依賴屬性。

//? This is not a good name, but I don't know what your semantics are.?

public bool HasBeenClicked

{

? ? get { return (bool)GetValue(HasBeenClickedProperty); }

? ? protected set { SetValue(HasBeenClickedPropertyKey, value); }

}


internal static readonly DependencyPropertyKey HasBeenClickedPropertyKey =

? ? DependencyProperty.RegisterReadOnly(nameof(HasBeenClicked), typeof(bool), typeof(Control1),

? ? ? ? new PropertyMetadata(false));


public static readonly DependencyProperty HasBeenClickedProperty = HasBeenClickedPropertyKey.DependencyProperty;


private void Button_Click(object sender, RoutedEventArgs e)

{

? ? HasBeenClicked = true;

}

在控制模板中:


<ControlTemplate.Triggers>

? ? <!--?

? ? The last applicable trigger wins: If both are true, GridColor will be Black?

? ? -->

? ? <Trigger Property="HasBeenClicked" Value="True">

? ? ? ? <Setter Property="GridColor" Value="DarkBlue"/>

? ? </Trigger>

? ? <Trigger Property="IsChecked" Value="True">

? ? ? ? <Setter Property="GridColor" Value="Black"/>

? ? </Trigger>

</ControlTemplate.Triggers>


查看完整回答
反對(duì) 回復(fù) 2023-05-13
  • 1 回答
  • 0 關(guān)注
  • 126 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)