簡體   English   中英

Datagrid:背景顏色+根據單元格值禁用選擇-使用觸發器

[英]Datagrid: background colour + disable of selection depending on the cell value - using trigger

關於SOPF上的WPF數據網格有很多問題,但是我仍然要問我的原因,因為我無法從這些數據中得到想要的東西...所以請不要生我的氣,嘗試通過回答漂亮的問題來幫助我請 :]。

提示:主要問題是: 為什么我的觸發器不起作用? :|

  1. 是否有一個datagrid屬性可以禁止選擇沒有值的單元格? 我想我知道有類似的東西,但現在找不到。 如果沒有這樣的事情,您將如何解決呢? 我在考慮selectedCellsChanged或類似事件。 但是我不確定如何解決。

  2. 如何根據內部值設置單元格的背景屬性? 正在尋找DatagridCell的一些text / content / value屬性( http://msdn.microsoft.com/en-us/library/system.windows.controls.datagridcell.aspx ),但對我沒有任何幫助...我知道是一些值轉換器,但我當時正在考慮使用觸發器解決此問題。

一些信息:我已經設置了SelectionMode="Extended" + SelectionUnit="Cell"

我嘗試使用觸發器設置背景,但沒有成功:

<DataGrid.CellStyle>
    <Style TargetType="DataGridCell">
        <Style.Triggers>
            <Trigger Property="HasContent"  Value="False">
                <Setter Property="Background" Value="DarkGray"/>
            </Trigger>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Background" Value="Red"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGrid.CellStyle>

屬性IsSelected可以正常工作,但是沒有內容的東西就不能工作。 只是我在想(錯誤)“”或null不存在嗎? 還嘗試了<Trigger Property="Content" Value=""><Trigger Property="Content" Value="null"> ,但是這些東西都不希望對我有用。 我怎么了?

編輯:我發現了這個問題- 我如何使用WPF Toolkit Datagrid更改單元格的背景顏色,所以我想我將使用它來處理第二個問題,但是我仍然看不到觸發器有什么問題...另外,如果我的觸發器有效,我可以通過某種方式將HasContent="False"為不可選擇,如果有這樣的話。 但是我只需要進行觸發工作即可:D

Edit2:當我設置<Trigger Property="HasContent" Value="True">它適用於我的所有單元格。所以我猜想它以null /“”作為值。 這讓我提出了疑問:

如果我想為null提供特殊背景並禁用它們的選擇,應該如何解決?

Edit3:禁用選擇應該是這樣的: <Setter Property="Focusable" Value="false"/>由於WPF ListView關閉了選擇 ..,所以無效:D:'(

現在,我只需要找出有關單元格null內容的觸發器...有什么提示嗎?

我創建一個簡單的DataGrid並嘗試找出HasContent為什么HasContent返回true 我檢查Content屬性,它具有TextBlock 因此,這可能就是為什么它總是正確的原因。

要解決此問題,您可以修改Trigger以使用轉換器:

<DataTrigger Binding="{Binding DataContext, RelativeSource={RelativeSource Self}, Converter={StaticResource CellConverter}}"  Value="False" >
     <Setter Property="Background" Value="Green"/>
</DataTrigger>

並在轉換器中檢查適當的屬性是否為null。 要知道應該檢查哪個屬性轉換器,可以使用ConverterParameter

這不是一個優雅的解決方案...但是它可以工作;)

這就是我設法最終解決了選擇空單元格的問題。 我知道這不是最好的解決方案,但是它對我有用:D感謝此問題: 如何確定DataGrid中所選單元格的值? (WPF)它幫助了:)。

private void mydatagrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
        {
            foreach (var item in e.AddedCells)
            {
                var col = item.Column as DataGridColumn;
                var fc = col.GetCellContent(item.Item);

                if (fc is TextBlock)
                {
                    if (((fc as TextBlock).Text == (""))||((fc as TextBlock).Text == null))
                    {
                        mydatagrid.SelectedCells.Remove(item);
                        fc.Focusable = false; // not sure if neccesarry/working after the previous line
                    }
                }
            }
        }

有關背景顏色的部分在這里解決: 如何在AutoGeneratingColumn事件期間根據其值設置數據網格單元的背景?

如果您對我的解決方案有任何投訴/改進,請添加評論:)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM