0
比方說,我有一個按鈕,在它的GridView的只是列一個簡單的ListView:處理按鈕的點擊命令裏面的ListView
<ListView x:Name="SomeListView" ItemsSource="{Binding Whatever}">
<ListView.View>
<GridView>
<GridViewColumn CellTemplate="{StaticResource myCellTemplate}" Header="ColumnHeader"/>
</GridView>
</ListView.View>
</ListView>
而且myCellTemplate看起來是這樣的:
<DataTemplate x:Key="myCellTemplate">
<Viewbox>
<Button x:Name="mybutton" Command="{Binding myClickCommand}" Content="{Binding btnBinding}"></Button>
</Viewbox>
</DataTemplate>
隨着myClickCommand一個ICommand在我的VM中。在這一點上,一切都是瘋狂的,用戶點擊我的按鈕就會像您期望的那樣調用myClickCommand。現在,我想一些鼠標懸停樣式添加到我行,所以我添加一個ItemContainerStyle這樣的:
<ListView x:Name="SomeListView" ItemContainerStyle="{StaticResource myItemStyle}" ItemsSource="{Binding Whatever}">
...
</ListView>
隨着myItemStyle爲:
<Style x:Key="myItemStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Grid>
<Border x:Name="borderMain" BorderThickness="1" BorderBrush="Transparent">
<GridViewRowPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<Rectangle x:Name="rectGlass" Fill="LightGray" Opacity=".2" Visibility="Hidden"></Rectangle>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="borderMain" Property="BorderBrush" Value="DarkGray" />
<Setter TargetName="rectGlass" Property="Visibility" Value="Visible"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在這一點上,用戶的點擊並不會觸發myClickCommand,大概是因爲該事件不是路由到按鈕。有什麼辦法可以做到這一點?
嗯。好吧,我看到我可以更改myItemStyle中控件的順序,將邊框置於rectGlass Rectangle的「頂部」。這可以讓按鈕被點擊,但風格並不是我想要的。無論如何,這回答了這個問題。謝謝。 – sabelbe