【发布时间】:2015-11-21 16:56:20
【问题描述】:
我想在MouseMove事件触发时更新Image的来源:
<DataTemplate>
...
<Viewbox MaxWidth="100" MaxHeight="100" >
<Image x:Name="Vignette0" Source="{Binding Vignette}" MouseMove="Vignette0_OnMouseMove"/>
</Viewbox>
</DataTemplate>
[2]
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding xxxx}" Value="true">
<Setter Property="Source" Value="{Binding Vignette}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
其中Vignette 是具有通知更改的属性。
- 我尝试 [2] 用
style.triggers(Change image using trigger WPF MVVM) 计算出一些东西,但在我的情况下,源是动态绑定(数据模板) - 我无法将
MouseMove放入 xxxx 的Binding中 - 我也尝试使用代码隐藏做一些事情,但我无法弄清楚。
有人有想法吗?
原始 XAML 代码:
<DataGrid x:Name="DgTest" ItemsSource="{Binding Evm.RawImagesCollectionView}" AutoGenerateColumns="false"
SelectedItem="{Binding Evm.SelectedImage}">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=ParentDir}" />
</StackPanel>
</DataTemplate>
</GroupStyle.HeaderTemplate>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander>
<Expander.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=ParentDir}" />
<TextBlock Text="{Binding Path=ItemCount}"/>
<TextBlock Text=" images"/>
</StackPanel>
</Expander.Header>
<ItemsPresenter />
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}" IsReadOnly="True"/>
<DataGridTextColumn Header="#frames" Binding="{Binding NumberOfFrames}" IsReadOnly="True"/>
<DataGridTextColumn Header="#bg" Binding="{Binding NumberOfBackgrounds}" IsReadOnly="True"/>
<DataGridTextColumn Header="path" Binding="{Binding ParentDir}" IsReadOnly="True"/>
<DataGridTemplateColumn Header="action">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="vertical" VerticalAlignment="Center">
<StackPanel Orientation="Horizontal">
<Button Content="prepare" Command="{Binding DecodeCommand}" Height="24"/>
<ProgressBar Minimum="0" Maximum="1.00" Value="{Binding PercentDone}" Width="40" Height="24"/>
</StackPanel>
<Viewbox MaxWidth="100" MaxHeight="100" >
<Image x:Name="VignetteViewBox0" Source="{Binding Vignette}" MouseMove="VignetteViewBox0_OnMouseMove">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding }" Value="true">
<Setter Property="Source" Value="{Binding Vignette}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</Viewbox>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
属性Vignette:
public BitmapImage Vignette
{
get
{
if (NumberOfFrames > 0)
{
var files = Directory.GetFiles(Filedir, "out*");
if (files.Length >= 5)
VignetteNumber = VignetteNumber != 5 ? 5 : _rgen.Next(0, files.Length);
else
VignetteNumber = _rgen.Next(0, files.Length);
var filepath = files[VignetteNumber];
var buffer = new BitmapImage();
using (Stream imageStreamSource = new FileStream(filepath,
FileMode.Open, FileAccess.Read, FileShare.Read))
{
buffer.BeginInit();
buffer.CacheOption = BitmapCacheOption.OnLoad;
buffer.StreamSource = imageStreamSource;
buffer.EndInit();
}
return buffer;
}
return null;
}
}
【问题讨论】:
-
您能否发布 XAML,我可以复制粘贴来重现您的情况?包括使用DataTemplate的区域
-
我添加了“原始代码”段落。谢谢
-
优秀 - 努力重现.. 现在这里是我的 +1 质量问题。
标签: c# wpf events triggers datatemplate