Silverlight ListBoxItem数据模板按钮问题!?
我正在尝试用具有编辑状态的项构建一个列表框。我为普通模式和编辑模式创建了一个单独的数据模板,但是一旦我在ContentPresenter上更改ContentTemplate,我就失去了按钮的事件bubbleup,同时也失去了DataTemplates(这意味着按钮单击不再有任何动作) 代码如下:Silverlight ListBoxItem数据模板按钮问题!?,silverlight,silverlight-4.0,sketchflow,Silverlight,Silverlight 4.0,Sketchflow,我正在尝试用具有编辑状态的项构建一个列表框。我为普通模式和编辑模式创建了一个单独的数据模板,但是一旦我在ContentPresenter上更改ContentTemplate,我就失去了按钮的事件bubbleup,同时也失去了DataTemplates(这意味着按钮单击不再有任何动作) 代码如下: <UserControl.Resources> <DataTemplate x:Key="NormalDT"> <StackPanel>
<UserControl.Resources>
<DataTemplate x:Key="NormalDT">
<StackPanel>
<TextBlock Text="{Binding Property1}"/>
<CheckBox IsChecked="{Binding Property2, Mode=TwoWay}"/>
<Button Content="Test" Click="Button_Click" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="EditDT">
<StackPanel>
<TextBox Text="{Binding Property1}"/>
<CheckBox IsChecked="{Binding Property2, Mode=TwoWay}"/>
<Button Content="Test" Click="Button_Click" />
</StackPanel>
</DataTemplate>
<Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
<Setter Property="Padding" Value="3"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Top"/>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="TabNavigation" Value="Local"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid Background="{TemplateBinding Background}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<DoubleAnimation Duration="0" To=".35" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="fillColor"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation Duration="0" To=".55" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="contentPresenter"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected"/>
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation Duration="0" To=".75" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="fillColor2"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetProperty="Visibility" Storyboard.TargetName="FocusVisualElement">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="contentPresenterEdit">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="contentPresenter">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Rectangle x:Name="fillColor" Fill="#FFBADDE9" IsHitTestVisible="False" Opacity="0" RadiusY="1" RadiusX="1"/>
<Rectangle x:Name="fillColor2" Fill="#FFBADDE9" IsHitTestVisible="False" Opacity="0" RadiusY="1" RadiusX="1"/>
<ContentPresenter x:Name="contentPresenter"
ContentTemplate="{StaticResource NormalDT}"
Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"/>
<ContentPresenter x:Name="contentPresenterEdit"
ContentTemplate="{StaticResource EditDT}"
Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}" Visibility="Collapsed"/>
<Rectangle x:Name="FocusVisualElement" RadiusY="1" RadiusX="1" Stroke="#FF6DBDD1" StrokeThickness="1" Visibility="Collapsed"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource SampleDataSource}}">
<ListBox Height="263" Margin="33,54,366,0" VerticalAlignment="Top" ItemTemplate="{StaticResource NormalDT}" ItemsSource="{Binding Collection}" ItemContainerStyle="{StaticResource ListBoxItemStyle1}"/>
</Grid>
看得见的
看得见的
崩溃
你知道在我的情况下如何让按钮点击事件生效吗
非常感谢您的帮助
谢谢。由于某种原因,我不知道,在焦点视觉状态中定义的
可见性
动画导致了此问题
尝试设置Opacity
动画,它应该可以工作
更新
实际上,您的代码在WPF中确实可以工作。我认为这是Silverlight中的一只虫子。如果将MouseLeftButtonDown
事件附加到TextBlock
上,它实际上会触发,但是按钮和复选框的情况不同
然后我怀疑可能是这个,但我不是100%确定
在Silverlight 5之前,ButtonBase不会更改视觉状态
当可见性设置为“折叠”时,控件可见时
同样,在使其不可见之前,它仍处于可视状态
由于某种原因,我不知道,焦点视觉状态中定义的可见性
动画导致了此问题
尝试设置Opacity
动画,它应该可以工作
更新
实际上,您的代码在WPF中确实可以工作。我认为这是Silverlight中的一只虫子。如果将MouseLeftButtonDown
事件附加到TextBlock
上,它实际上会触发,但是按钮和复选框的情况不同
然后我怀疑可能是这个,但我不是100%确定
在Silverlight 5之前,ButtonBase不会更改视觉状态
当可见性设置为“折叠”时,控件可见时
同样,在使其不可见之前,它仍处于可视状态
你是金鑫!!!:我将可见性操作与不透明度进行了交换,现在按钮点击气泡上升。斯威耶!非常感谢你!你是金鑫!!!:我将可见性操作与不透明度进行了交换,现在按钮点击气泡上升。斯威耶!非常感谢你!