Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在运行时更改自动宽度_C#_Wpf_Xaml - Fatal编程技术网

C# 在运行时更改自动宽度

C# 在运行时更改自动宽度,c#,wpf,xaml,C#,Wpf,Xaml,我有一个XAML/WPF自定义控件,用于显示项目列表。我最初将此控件宽度设置为“自动”,因为我希望它重新调整为添加到其中的最宽项目的宽度 <custom:MyCustomControl ThemeName="MyDefaultTHeme" x:Name="PART_MyItems" Height="Auto" Width="Auto"/>

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

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

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


第一次使用(第一次加载控件)后,如何关闭
Width=“Auto”
,或者将宽度设置为初始宽度而不再更改>

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

为什么不设置一个MaxWidth来限制它变得比您想要的大?这可能对您有用,这可以工作并且不会调整我的控件的大小。但现在,当我将GridSlitter拖动到左侧时,控件的大小保持不变,并且不会随GridSplitter一起展开。所以这比我最初解释的要尴尬一些。我希望在主题更改时关闭自动调整大小,然后在更改后再次打开,如果这样做有意义的话,如果您不能在考虑周围控制状态的所有大小因素的情况下对宽度进行多重绑定,然后,您需要覆盖控件上的MeasureOverride方法,这样您就可以抛出一堆代码来解决每个情况下控件的大小问题。