gpt4 book ai didi

c# - 如何为 ListBoxItem 中定义的 UI 元素的属性设置动画?

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:19 27 4
gpt4 key购买 nike

我有一个数据模板的列表框,其中包含一些文本 block 和组合框。我想在文本 block 和组合框上应用一些动画,就像我想在双击时更改文本 block 颜色一样。因此,我尝试为此创建 Storyboard颜色动画,但出现以下错误

Cannot resolve all property references in the property path 'Color'.
Verify that applicable objects support the properties.

我的 Storyboard动画代码是这样的:

 <Storyboard x:Key="onSubmitAnimation">              
<ColorAnimation From="Green" To="Red" Duration="0:0:5"
Storyboard.TargetProperty="Color" />
</Storyboard>

我想知道我的方法是否正确,或者有更好的方法来实现列表框数据模板内的文本 block 上的彩色动画?很想得到所有可能的建议。提前致谢。

编辑: 这是我用来启动 Storyboard的代码;

 ListBoxItem item = (ListBoxItem)sender;
Storyboard sb = this.FindResource("onSubmitAnimation") as Storyboard;
Storyboard.SetTarget(sb, item);
sb.Begin();

我想我应该在 setTarget 函数中传递文本 block 对象,但我不知道如何在 listboxitem 中获取正确的文本 block 对象。

我的列表框被命名为 Entrylistbox,所以我可以通过它访问列表框的任何项目,但不确定如何访问文本 block 并在其上应用动画。

编辑 2:我仍然无法在文本 block 上应用动画,出现以下错误

 The method or operation is not implemented.

这是我的数据模板代码

<DataTemplate x:Key="DefaultDataTemplate" >
<Canvas Height="62" Width="600" Background="White" >
<Image Source="{Binding Path=IconBinding, Converter={StaticResource imageConverter} }"
Canvas.Left="100" Canvas.Top="10" Height="35"/>

<TextBlock Name="textblock1" Padding="5" Canvas.Left="20" Canvas.Top="10"
Background="LightGray" VerticalAlignment="Center" Height="35"
Foreground="Gray" TextAlignment="Center" FontSize="16"
FontFamily="/TimeSheet;component/Resources/#Open Sans Extrabold"
Width="60" FontWeight="Bold">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}H">
<Binding Path="HoursBinding" />
</MultiBinding>
</TextBlock.Text>
</Canvas>
</DataTemplate>

我想改变“textblock1”的背景颜色。

最佳答案

您的问题似乎是从包含的 ListBoxItem 对象访问 TextBlock 元素。这是一个相当普遍的问题,在 How to: Find DataTemplate-Generated Elements 中有详细讨论。 MSDN 上的页面。

但是,简而言之,您需要使用 ItemContainerGenerator.ContainerFromItem 方法来访问 DataTemplate 中定义的已应用于 ListBoxItem。这是链接页面中的一个简短示例:

// Getting the currently selected ListBoxItem 
// Note that the ListBox must have
// IsSynchronizedWithCurrentItem set to True for this to work
ListBoxItem myListBoxItem =
(ListBoxItem)(myListBox.ItemContainerGenerator.ContainerFromItem(myListBox.Items.CurrentItem));

// Getting the ContentPresenter of myListBoxItem
ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(myListBoxItem);

// Finding textBlock from the DataTemplate that is set on that ContentPresenter
DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;
TextBlock myTextBlock = (TextBlock)myDataTemplate.FindName("textBlock", myContentPresenter);

// Do something to the DataTemplate-generated TextBlock
MessageBox.Show("The text of the TextBlock of the selected list item: "
+ myTextBlock.Text);

关于c# - 如何为 ListBoxItem 中定义的 UI 元素的属性设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22505793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com