How can I make a WPF combo box have the width of its widest element in XAML?

前端 未结 13 1983
清酒与你
清酒与你 2020-11-30 18:58

I know how to do it in code, but can this be done in XAML ?

Window1.xaml:



        
相关标签:
13条回答
  • 2020-11-30 19:46

    This can't be in XAML without either:

    • Creating a hidden control (Alan Hunford's answer)
    • Changing the ControlTemplate drastically. Even in this case, a hidden version of an ItemsPresenter may need to be created.

    The reason for this is that the default ComboBox ControlTemplates that I've come across (Aero, Luna, etc.) all nest the ItemsPresenter in a Popup. This means that the layout of these items is deferred until they are actually made visible.

    An easy way to test this is to modify the default ControlTemplate to bind the MinWidth of the outermost container (it's a Grid for both Aero and Luna) to the ActualWidth of PART_Popup. You'll be able to have the ComboBox automatically synchronize it's width when you click the drop button, but not before.

    So unless you can force a Measure operation in the layout system (which you can do by adding a second control), I don't think it can be done.

    As always, I'm open to an short, elegant solution -- but in this case a code-behind or dual-control/ControlTemplate hacks are the only solutions I have seen.

    0 讨论(0)
提交回复
热议问题