簡體   English   中英

Silverlight DataGrid:在行詳細信息模板中設置控件的可見性?

[英]Silverlight DataGrid: Set visibility of control within row details template?

我有一個實例,其中詳細信息模板中有兩個主堆棧面板。

一個默認設置為折疊。 但是,右鍵單擊並選擇該堆棧面板的可見性將被觸發。 當行詳細信息已經展開時,可能會發生這種情況。

但是,當展開行詳細信息並選擇右鍵單擊以查看該堆棧面板時,我將以編程方式將其可見性更改為Visible,但它不會變得可見。

我是否需要進行二次呼叫以更新UI並強制執行可見性設置?

這是我的代碼:

        private void SetWFHistoryVisibility(bool show)
    {
        var elements = VisualTreeHelper.FindElementsInHostCoordinates(position, this);
        var row = (from element in elements
                   where element is DataGridRow
                   select element).FirstOrDefault() as DataGridRow;

        if (row != null)
        {
            DataGridDetailsPresenter presenter = VisualHelper.FindVisualChild<DataGridDetailsPresenter>(row);
            if (presenter.Children.Count > 0)
            {
                var grid = (from el in presenter.Children
                            where el is Grid
                            select el).FirstOrDefault() as Grid;

                if (grid != null)
                {
                    StackPanel wfgc = grid.FindName("wfGridContainer") as StackPanel;
                    if (show)
                        wfc.Visibility = System.Windows.Visibility.Visible;
                    else
                        wfc.Visibility = System.Windows.Visibility.Collapsed;
                }
            }
        }
    }

您可能需要調用DataGridView.Refresh()或等效項,具體取決於您的面板/布局。 也可以是父控件,也需要更新/刷新。

我知道在Silverlight DataGrid中確實有一個AutoRefresh ,但它主要由DGV或DataGrid類中的EventTrigger控制。 正如你發現它並不完美。

也許您可以觸發以下事件之一,並允許Control計算出自己的視圖更新。

https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(v=vs.110).aspx

這個解決方案:

Dispatcher.BeginInvoke(() => {
//set the added control to be visible
});

是由MSDN上的用戶建議的StackPanel刷新。

其他一些建議建議使用以下組合:

_.Invalidate()
_.UpdateLayout()

強制刷新。

暫無
暫無

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

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