WPF集合控制項實現分隔字元(ItemsControl Separator)

來源:互聯網
上載者:User
這篇文章主要為大家詳細介紹了WPF集合控制項實現分隔字元ItemsControl Separator,具有一定的參考價值,感興趣的小夥伴們可以參考一下

在WPF的集合控制項中常常需要在每一個集合項目之間插入一個分隔字元樣式,但是WPF的ItemsControl沒有相關功能的直接實現,所以只能考慮曲線救國,經過研究,大概想到了以下兩種實現方式。

先寫出ItemsControl的資料範本,如下:


<ItemsControl ItemsSource="{Binding Source}" BorderThickness="1" BorderBrush="Blue" VerticalAlignment="Stretch"> <ItemsControl.ItemTemplate>  <DataTemplate>   <Grid>    <Grid.RowDefinitions>     <RowDefinition Height="Auto" />     <RowDefinition Height="*" />    </Grid.RowDefinitions>    <Border Name="Bd" Grid.Row="0" Height="1" Background="Red" />    <TextBlock Grid.Row="1" Text="{Binding}" />   </Grid>  </DataTemplate> </ItemsControl.ItemTemplate></ItemsControl>

其中名為Bd的Border就是分隔字元,此時每一項的頭部都可以看見分隔字元,現在我們的目標是要隱藏掉第一項的分隔字元,這就達到了項與項之間才有分隔字元的目的。

第一種實現方式最簡單,使用集合項目前向綁定PreviousData,這是四種綁定方式中的一種,估計也是平時用得最少的一種,不過此時就派上用場了,代碼如下:


<DataTemplate.Triggers> <DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}"     Value="{x:Null}">  <Setter TargetName="Bd" Property="Visibility" Value="Collapsed" /> </DataTrigger></DataTemplate.Triggers>

當某一項的前項為空白時就隱藏分隔字元,簡單的一行代碼搞定。不過這種實現方式有個缺點就是如果使用的是Insert方式向繫結資料源的最前面添加資料則就會出現不止一個沒有分隔字元的項,如果是往隊尾或者隊中添加則不會出現這個問題。

第二種實現方式是藉助ItemsControlAlternationCountAlternationIndex屬性來為集合項目標記索引號,再隱藏索引號為0的項的分隔字元,代碼如下:

複製代碼 代碼如下:

<ItemsControl ItemsSource="{Binding Source}" BorderThickness="1" BorderBrush="Blue"
VerticalAlignment="Stretch" AlternationCount="{Binding Source.Count}">

首先在ItemsControl上綁定AlternationCount到資料來源的Count屬性上,然後此時ItemsControl的AlternationIndex屬性就變成的該集合資料來源的索引號了,在觸發器中寫上邏輯即可:


<Border Name="Bd" Grid.Row="0" Height="1" Background="Red"> <Border.Style>  <Style TargetType="{x:Type Border}">   <Style.Triggers>    <DataTrigger     Binding="{Binding Path=(ItemsControl.AlternationIndex),    RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}}"     Value="0">     <Setter Property="Visibility" Value="Collapsed" />    </DataTrigger>   </Style.Triggers>  </Style> </Border.Style></Border>

觸發器判定當索引號為0時就隱藏Border,這種方式代碼量也不大,優點是能絕對實現這個功能,無論向隊首插入還是隊尾插入,但是AlternationCountAlternationIndex屬性本來的含義是用來實現比如隔行變色等功能,此時這種功能被佔用,所以如果你的集合要同時實現分隔字元和隔行樣式的功能可能需要額外加轉換器,不過轉換器內容也很簡單,求個餘數就能還原之前的功能了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.