您好我想弄清楚如何在屬性更新時為 TextBlock 設定影片。WinUI3/XAML 的新手,但我發現https://docs.microsoft.com/en-us/dotnet/desktop/wpf/advanced/how-to-apply-animations-to-text提供了很多示例作業,但他們都使用TextBlock.Loaded。我嘗試將其更改為 TargetUpdated、SourceUpdated、FrameWork.x、Binding.x 等,但都崩潰了,所以我不知道該放什么。網上有很多例子,但我能找到的似乎是 WPF 或 UWP 仍然崩潰。
我的代碼與 MS 的示例無系結幾乎相同:
<TextBlock Text="{x:Bind Path=Viewmodel.UpdatedText, Mode=OneWay}">
<TextBlock.Foreground>
<SolidColorBrush x:Name="MySolidColorBrush" Color="Maroon" />
</TextBlock.Foreground>
<TextBlock.Triggers>
<EventTrigger RoutedEvent="TextBlock.Loaded">
<BeginStoryboard>
<Storyboard>
<ColorAnimation AutoReverse="True" Storyboard.TargetName="MySolidColorBrush" Storyboard.TargetProperty="Color" From="DarkOrange" To="SteelBlue" Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
加載時確實有效,但是我想在文本更新時對其進行影片處理。
我發現的一個例子是Animate textblock when the value changes,但它也使用 .Loaded 。在評論中它提到“您必須在系結中將 NotifyOnTargetUpdated 屬性設定為 true”,但 NotifyOnTargetUpdated 似乎不存在(在 WinUI 中?)。
答案可能很簡單,但我對此有點迷茫。我也在使用 MVVM 模式,因此避免了代碼落后,但看起來這么簡單的東西不需要它來查看 Microsoft 的示例?盡管如果我愿意,請隨時糾正我。謝謝!
uj5u.com熱心網友回復:
在這種情況下試圖“避免代碼隱藏”通常是一個錯誤。視圖相關的邏輯應該使用編程語言在視圖(或控制元件)中實作。這不會以任何方式破壞 MVVM 模式,因為該模式首先不是試圖從視圖中消除代碼。
使用諸如 XAML 之類的標記語言來實作非常高級的 UI 邏輯通常是一種反模式,在 UWP 和 WinUI 3 的情況下,甚至不可能使用觸發器來完成你想要的。
參考ReactiveUI 檔案,“C# 是一種比 XAML 更具表現力、更簡潔的語言,雖然您可以在不撰寫任何代碼的情況下創建完整的復雜視圖,但結果將是無法維護、難以閱讀的混亂。”
我的建議是以編程方式實作影片,或者直接在視圖的代碼隱藏中,或者作為附加行為或自定義控制元件的一部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/459085.html
