【问题标题】:Change Auto Width at runtime在运行时更改自动宽度
【发布时间】:2017-01-24 16:04:29
【问题描述】:

我有一个 XAML/WPF 自定义控件,用于显示项目列表。我最初将此控件的宽度设置为自动,因为我希望它调整为添加到其中的最宽项目的宽度。

<custom:MyCustomControl ThemeName="MyDefaultTHeme" 
                        x:Name="PART_MyItems" 
                        Height="Auto" 
                        Width="Auto"/>

但是,在运行时,用户可以更改自定义控件的 ControlTemplate (ThemeName),从而更改项目的外观(图标和文本大小等)。然后控件将根据项目的宽度更改其宽度,有时会填满屏幕的整个宽度。这是我不想要的。

我怎样才能在第一次使用后关闭Width="Auto"(首次加载控件)或将宽度设置为初始宽度并且不再更改它>

【问题讨论】:

标签: c# wpf xaml


【解决方案1】:

只需在更改主题之前调用MyCustomControl.Width = MyCustomControl.ActualWidth,因为您可能有 C# 代码进行主题切换。这将摆脱Auto

【讨论】:

  • 这工作并且不会调整我的控件大小。但是现在当我将 GridSlitter 拖到左侧时,我的控件保持相同的大小并且不会随着 GridSplitter 扩展。所以它比我第一次解释的更尴尬。我希望在更改主题时关闭 AutoSize,然后在有意义的情况下重新打开
  • 如果考虑到周围控件状态的所有尺寸因素,您不能对 Width 进行多重绑定,那么您将需要覆盖控件上的 MeasureOverride 方法,以便您可以抛出一个一堆代码的问题是在每种情况下你的控件应该是什么大小。
猜你喜欢
  • 1970-01-01
  • 2011-06-27
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 2018-08-19
  • 1970-01-01
相关资源
最近更新 更多