中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WPF如何實現分隔符

發布時間:2021-07-12 09:57:51 來源:億速云 閱讀:222 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關WPF如何實現分隔符的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在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屬性本來的含義是用來實現比如隔行變色等功能,此時這種功能被占用,所以如果你的集合要同時實現分隔符和隔行樣式的功能可能需要額外加轉換器,不過轉換器內容也很簡單,求個余數就能還原之前的功能了。

感謝各位的閱讀!關于“WPF如何實現分隔符”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

wpf
AI

惠安县| 东兴市| 社会| 成都市| 阿尔山市| 泌阳县| 凉城县| 冀州市| 青岛市| 绥滨县| 曲水县| 安溪县| 河源市| 牙克石市| 比如县| 五原县| 安阳市| 洛川县| 金平| 册亨县| 崇信县| 石林| 徐水县| 奈曼旗| 突泉县| 淮南市| 嵊州市| 长岛县| 蓬莱市| 双牌县| 松阳县| 沽源县| 吉隆县| 石狮市| 星子县| 司法| 民乐县| 金溪县| 威宁| 威海市| 平乡县|