我已經為此苦苦掙扎了幾天,但經過大量努力后無法找到解決方案。這是我面臨問題的代碼。所以我有一個ItemsControl其中每個元素都是Button與每個Button具有Image和TextBlock。在上空盤旋Button我能看到Background的Button改變到Red如預期。但我無法改變Foreground的TextBlock到Green。高度贊賞這方面的任何幫助
<ControlTemplate x:Key="ButtonTemplate" TargetType="ContentControl">
<Grid Background="Transparent" x:Name="Mini">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="PointerOver">
<VisualState.Setters>
<Setter Target="Mini.Background" Value="Red" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter x:Name="MiniContent" />
</Grid>
</ControlTemplate>
<DataTemplate x:Key="ListItemTemplate" x:DataType="local:DataModel">
<Button
Template="{StaticResource ButtonTemplate}">
<Button.ContentTemplate>
<DataTemplate x:DataType="local:DataModel">
<UserControl>
<Grid >
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="PointerOver">
<VisualState.Setters>
<Setter Target="Value.Foreground" Value="Green" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<TextBlock x:Name="Value"
Foreground="Yellow"
Text="{x:Bind DisplayName, Mode=OneWay}"/>
<Image
Width="16"
Source="{x:Bind ImageBitmap, Mode=OneWay}"/>
</Grid>
</UserControl>
</DataTemplate>
</Button.ContentTemplate>
</Button>
</DataTemplate>
<ItemsControl
ItemTemplate="{StaticResource ListItemTemplate}"
ItemsSource="{x:Bind DataModelVector, Mode=OneWay}" />
uj5u.com熱心網友回復:
您需要一些東西在 VisualStates 之間實際轉換,PointerOver 狀態不會自動觸發。最簡單的方法是將 DataTemplate 的內容分解到它自己的檔案(帶有標記和代碼隱藏的 UserControl)中,并使用 VisualStateManager.GoToState 處理代碼中的指標事件以在視覺狀態之間進行轉換。
您還可以創建一個可重用的“StateTrigger”來將任何控制元件轉換為“PointerOver”視覺狀態,但通常一些代碼隱藏更簡單。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341348.html
