2013-08-28 86 views
1

這裏有一個想法:我需要在我的DataGridTemplateColumn中有一個展開/摺疊按鈕,以允許用戶展開單元格以查看完整內容,或摺疊它以僅查看第一行。這裏是我的模板:將展開/摺疊按鈕添加到DataGrid單元格

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <Grid HorizontalAlignment="Stretch" > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <local:ExpandCollapseButton /> 
      <TextBlock x:Name="MyTB" Text="{Binding Body}" Grid.Column="1" TextTrimming="WordEllipsis" /> 
     </Grid> 
    </DataTemplate> 
</DataGridTemplateColumn.CellTemplate> 

ExpandCollapseButton是一個簡單的UserControl +和之間的切換 - 單擊時的圖標。它有一個名爲IsExpanded的讀/寫bool屬性。

現在我想在擴展狀態下添加一個簡單TriggerExpandCollapseButton的觸發器,這將只需設置TextBlock'處於摺疊狀態s TextTrimming屬性WordEllipsis並將其設置爲None,但不能找出正確的這樣做的方式。我想我的展開控制下加入以下代碼上面:

<local:ExpandCollapseButton.Triggers> 
    <Trigger Property="IsExpanded" Value="True"> 
     <Setter TargetName="MyTB" Property="TextTrimming" Value="None" /> 
    </Trigger> 
</local:ExpandCollapseButton.Triggers> 

但是這給錯誤說,這我無法理解。

+0

你不能把觸發UI元素這樣。您只能將'EventTriggers'添加到UI元素的觸發器集合中。使用'DataTemplate.Triggers'什麼的。 –

+0

@HighCore:請您舉例說明一下嗎? – dotNET

回答

3

使用的DataTemplate觸發與SOURCENAME和的TargetName:

<DataGridTemplateColumn.CellTemplate> 
<DataTemplate> 
    <Grid HorizontalAlignment="Stretch" > 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <local:ExpandCollapseButton x:Name="MyButton"/> 
     <TextBlock x:Name="MyTB" Text="{Binding Body}" Grid.Column="1" TextTrimming="WordEllipsis" /> 
    </Grid> 
    <DataTemplate.Triggers> 
      <Trigger Property="IsExpanded" Value="True" SourceName="MyButton"> 
       <Setter Property="TextBlock.TextTrimming" Value="None" TargetName="MyTB"/> 
      </Trigger> 
     </DataTemplate.Triggers> 
</DataTemplate> 

感謝

+0

謝謝了。這像一個魅力。你甚至可以設置目標的多個屬性,就像我必須同時設置TextTrimming和TextWrapping一樣。然而,爲了這個工作,我們必須定義觸發屬性(在我的情況下是'IsExpanded')作爲依賴屬性,而不是一個簡單的屬性。 – dotNET