在 WPFListView中,我有 3 列(GridViewColumns)。第一列是自動遞增的(1、2、3 等)。第二個只是一個字串,最后一列包含 3 個按鈕,洗掉、上移和下移(都在同一列中)。讓我們專注于我感興趣的最后一個。
我想達到什么目的?
我想從 的第一行ListView折疊向上移動按鈕(向上箭頭),并從ListView. 對我來說,第一行是從 1 開始的。見下圖。

我做了什么? 我對按鈕應用了一種樣式以折疊第一行中的上移按鈕并且它起作用了,但是現在我不知道如何對最后一行中的下移按鈕執行相同的操作(請參見標記為紅色圓圈的按鈕上圖)。
這是我的代碼:
<Style x:Key="myButtonStyle" TargetType="Button">
<Style.Triggers>
<!-- Collapse move up button from the first row of the ListView -->
<DataTrigger Binding="{Binding (ItemsControl.AlternationIndex),
RelativeSource={RelativeSource AncestorType=ListViewItem}}" Value="1">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<!-- HOWTO: Collapse move down button from the last row of the ListView here??? -->
</Style.Triggers>
</Style>
正如您在上面看到的,我ItemsControl.AlternationIndex使用它來為ListView.
uj5u.com熱心網友回復:
您需要做的是將當前交替索引與交替計數進行比較。如果Index == Alternation Count - 1那么它是最后一行,您可以隱藏按鈕。但是, 的Value屬性DataTrigger不是依賴屬性,因此您不能將交替計數系結為值。此外,您需要將交替計數減一與交替索引進行比較。
您可以做的是使用 aMultiBinding來系結交替索引和交替計數。然后,您可以創建一個自定義值轉換器來檢查上述條件并回傳trueor false。從您Value開始,DataTrigger您只需分配True.
讓我們創建一個轉換器,如果有兩個值相差 1,它就會回傳。您可以使這不那么抽象,但是這樣系結索引和計數的順序無關緊要。
public class OffByOneToBoolConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values == null || values.Length != 2 || !(values[0] is int value1) || !(values[1] is int value2))
return Binding.DoNothing;
return Math.Abs(value1 - value2) == 1;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new InvalidOperationException();
}
}
對于向下按鈕,使用MultiBinding.
<Style x:Key="myDownButtonStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource OffByOneToBoolConverter}">
<Binding Path="(ItemsControl.AlternationIndex)"
RelativeSource="{RelativeSource AncestorType=ListViewItem}"/>
<Binding Path="(ItemsControl.AlternationCount)" RelativeSource="{RelativeSource AncestorType={x:Type ListView}}"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
不要忘記OffByOneToBoolConverter在范圍內的任何資源字典中創建一個實體。順便說一句,向上和向下按鈕需要單獨的按鈕樣式,因為它們都有獨占條件。對于向上按鈕考慮Visibility設定為Hidden,那么即使向上按鈕未顯示,按鈕向下按鈕也會保持原位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446088.html
