2017-10-10 94 views
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,大概是因爲該事件不是路由到按鈕。有什麼辦法可以做到這一點?

回答

0

您的矩形(rectGlass)位於按鈕的頂部。該按鈕沒有收到點擊事件,因爲它實際上沒有被點擊。

+0

嗯。好吧,我看到我可以更改myItemStyle中控件的順序,將邊框置於rectGlass Rectangle的「頂部」。這可以讓按鈕被點擊,但風格並不是我想要的。無論如何,這回答了這個問題。謝謝。 – sabelbe