![](/img/trans.png)
[英]change a row template in silverlight datagrid for a particular row
[英]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.