【问题标题】:button visibility on wpf DataGridTemplateColumn is Hidden insted of Collapedwpf DataGridTemplateColumn 中的按钮可见性是隐藏而不是折叠
【发布时间】:2017-01-14 19:11:13
【问题描述】:

在我的DataGridTemplateColumn 中,我设置了一个DataTemplate

在里面我有一个Button,我将他的Visibility 属性绑定到折叠,但结果留下了像隐藏的空间。为什么?

如果我只写“Collapsed”,它可以工作,但我想绑定。也许我没有写完美的装订? 请帮忙

 <DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate >
       <DataTemplate>
           <StackPanel  Width="auto" Orientation="Horizontal" >
              <Button Click="DeleteTravelDetails"  Visibility="{Binding DataContext.IsDeleteTravelVisible,RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}}">
                <Image Source="/Resources;component/Images/delete3.jpg" Width="auto" Height="30" ToolTip="Delete Travel"  />
              </Button>
              <Button Click="ExpensesTravelClick" Margin="4,0,0,0" >
                 <Image Source="/Resources;component/Images/information.png" Width="auto" Height="30"/>
              </Button>
              <Button Click="ExcelTravelClick" Margin="4,0,0,0" >
                 <Image Source="/Resources;component/Images/excel.jpg" Width="auto" Height="30"/>
              </Button>
           </StackPanel>
        </DataTemplate>
     </DataGridTemplateColumn.CellTemplate>        
  </DataGridTemplateColumn>

代码

private Visibility _isDeleteTravelVisible = Visibility.Collapsed; 
public Visibility IsDeleteTravelVisible { 
    get { return _isDeleteTravelVisible; } 
    set { _isDeleteTravelVisible = value; 
         if (PropertyChanged != null) { 
            PropertyChanged(this, new PropertyChangedEventArgs("IsDeleteTravelVisible")); 
            }
        }
    }

【问题讨论】:

  • 确保 DataContext.IsDeleteTravelVisible 是 Visibility 属性,而不是 bool 属性。
  • 你好,Giangredorio。此属性是可见性属性,但这不会删除 spcae。为什么?私有可见性_isDeleteTravelVisible = Visibility.Collapsed;公共可见性 IsDeleteTravelVisible { 获取 { 返回 _isDeleteTravelVisible; } 设置 { _isDeleteTravelVisible = 值; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("IsDeleteTravelVisible")); }}}
  • @LiranKremer,如果删除按钮是Hidden而不是Collapsed,那么信息按钮之前会有空白,而不是Excel按钮之后
  • 感谢我通过这个链接解决了问题stackoverflow.com/questions/20174094/…

标签: wpf datagridtemplatecolumn


【解决方案1】:

在这种情况下,DataGrid 单元格的宽度取决于 DataGrid 列的宽度。 在您的情况下,可见性属性确实设置为折叠,StackPanel 宽度被定义为自动,因此即使它不可见,它也更小,但列宽决定了包含您的堆栈面板的单元格的宽度。

https://msdn.microsoft.com/en-us/library/cc903935(v=vs.95).aspx 链接包含 DataGrid 的大小信息,请查看“Sizing Columns and Column Headers”部分

【讨论】:

    【解决方案2】:

    正如@Ivan Milenkovic 提到的,您看到的大小取决于网格列。

    在此 stackoverflow 答案中,您可以看到在列或按钮可见性发生更改时如何更新列大小: https://stackoverflow.com/a/5651287/2289942

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2017-07-04
      • 2019-04-13
      • 1970-01-01
      • 2012-12-04
      • 1970-01-01
      相关资源
      最近更新 更多