- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 XAML
中有一个带有 ItemTemplate
的 ListView
,每个项目都包含一个 Button
和一个 字体图标
。按下按钮后,我想在 FontIcon
上做一个旋转动画。我已经在 DataTemplate
之外构建了运行良好的行为,因此我将 Storyboard
添加到 ListView
中,现在我得到了一个Storyboard.TargetName
错误。是否可以对 DataTemplate
中的特定元素执行 DoubleAnimation
,它由 DataTemplate
中的另一个元素触发?
我之前没有在 XAML
中对动画做过任何事情,所以如果我走错了路,请告诉我。
这是 ListView
和 Storyboard
<ListView x:Name="ItemList">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<Storyboard x:Name="TestStoryboard">
<DoubleAnimation
Duration="0:0:0.2"
To="180"
Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)"
Storyboard.TargetName="iconlist"
d:IsOptimized="True"/>
</Storyboard>
</StackPanel.Resources>
<Button Click="ButtonTest_Click">
<TextBlock Text="{Binding}" />
</Button>
<FontIcon x:Name="iconlist" Glyph="###" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
为了更好地理解这里是我正在构建的屏幕截图。我想通过单击 ListView
相应项目内的按钮来旋转表情符号:
最佳答案
首先,TestStoryBoard
是本地数据模板;它不是你类的一个领域。
其次,您需要在目标上定义一个RenderTransform
,以便动画有一些动画。 (这也大大简化了目标属性的规范,因为您可以为转换本身命名。)
这是一个稍微修改过的例子,这样我就可以把一些东西拼凑起来并声称它有效——它确实有效,但并不漂亮:
<ListView
Grid.Row="2"
ItemsSource="{x:Bind Items}">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<Storyboard x:Name="TestStoryboard">
<DoubleAnimation
Duration="0:0:0.2"
To="180"
Storyboard.TargetProperty="Angle"
Storyboard.TargetName="transform" />
</Storyboard>
</StackPanel.Resources>
<Button Click="ButtonTestClick" Content="{Binding}" />
<TextBlock Text="Hi">
<TextBlock.RenderTransform>
<RotateTransform
x:Name="transform"
CenterX="50"
CenterY="20"
/>
</TextBlock.RenderTransform>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
代码隐藏:
public string[] Items { get; } =
{
"One", "Two", "Three",
};
public MainPage()
{
InitializeComponent();
}
private void ButtonTestClick(object sender, RoutedEventArgs e)
{
UIElement clickedElement = sender as UIElement;
StackPanel stackPanel = FindParent<StackPanel>(clickedElement);
object value = null;
stackPanel?.Resources.TryGetValue("TestStoryboard", out value);
Storyboard storyboard = value as Storyboard;
storyboard?.Begin();
}
public static T FindParent<T>(DependencyObject element)
where T : DependencyObject
{
while (element != null)
{
DependencyObject parent = VisualTreeHelper.GetParent(element);
T candidate = parent as T;
if (candidate != null)
{
return candidate;
}
element = parent;
}
return default(T);
}
请注意,我们需要从 StackPanel
的 Resource
字典中提取 Storyboard。
我希望这可以作为您的起点。
关于c# - DataTemplate 中带有 DoubleAnimation 的 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34997980/
我有一个双重动画,其中窗口按比例缩小并移到一边。我在 Window_Deactivated 事件中执行此操作。代码如下:
在 Windows Phone 8.0 Silverlight 中,我可以在我的 XAML 页面中拍摄图像并使用以下 Storyboard 将其完全旋转一次。 我正尝试在我的新 Wind
我正在使用 DoubleAnimation用于放大和平移 map 。我的 map 是一张分辨率很高 (15,000 x 8,438) 的图像。问题是第一次缩放动画非常不稳定且不流畅,第二次变得更好等等
这应该很简单,但我似乎做对了。我收藏了 System.Windows.Controls.Image .当我选择其中一个时,我希望所有其他人都获得 0.5 的不透明度。 .我正在使用 MVVM,这背后的
作为展览,我正在尝试在 ScaleTransform 的 ScaleX 和 ScaleY 属性上使用 DoubleAnimation。我有一个矩形 (144x144),我想在五秒内将其变成矩形。 我的
我正在尝试绑定(bind)我的 DoubleAnimation代码隐藏中的 c# 变量的属性。 这是我的 XAML:
我在 XAML 中有一个带有 ItemTemplate 的 ListView,每个项目都包含一个 Button 和一个 字体图标。按下按钮后,我想在 FontIcon 上做一个旋转动画。我已经在 Da
我有一个包含多个 DoubleAnimations 的 Storyboard。我想在其中一个 child 完成时执行一个功能。但是,如果我将 EventHandler 附加到 DoubleAnimat
我正在尝试制作一个 Button,它使用该面板的 Height 属性上的动画打开/关闭该面板。 方法是将动画的“To”值绑定(bind)到 viewmodel 属性,该属性在按钮的命令中更改。 我想它
我正在尝试使用 DoubleAnimation 更改 StackPanel 的 Height 属性。该代码不会抛出任何异常。但是动画不起作用。
我希望有人可以帮助我解决我认为相对简单的问题。 我正在使用 DoubleAnimation 对象在代码中设置淡出动画。它淡出图像,然后在完成后触发 Completed 事件。 我想从事件处理程序中获取
好的,我正在使用 WPF 为我的 MP3 播放器制作一个 GUI,我有一个边框,可以为播放轨道的每一秒扩大其宽度属性,从而为当前播放的歌曲制作一个“进度条”。我将边框命名为 ProgressBarBo
为了了解动画和 UI,我正在制作一个基本的 WPF/C# 应用程序,用户可以在其中选择要显示的车辆数量,然后这些车辆(即不同车辆的图像)出现在 Canvas 中并四处移动。 WPF 非常简单:
我有使用 MVVM 模式的 WPF 解决方案。它包含 ViewModel BlockViewModel: public class BlockViewModel:ViewModelBase {
我有一个 ListBox.ItemTemplate,它有一个 ToggleButton,里面有一个复选框和一个来自 devexpress 的 ProgressBarEdit。 然后我有一个针对复选框的
我有一个 Windows 8.1 应用程序,其 Progress 定义如下 我有如下 StoryBoard 动画定义如下。 后面的 C# 代码调用 Storyboard 的 begin
我需要同时更改行和列。这可能吗?我搜索过但找不到答案 var da = new DoubleAnimation(); da.From = 0; da.T
我是一名优秀的程序员,十分优秀!