Получить ширину ComboBoxItem's - PullRequest
2 голосов
/ 26 октября 2010

У меня есть комбинированный список, связанный со строкой [].У меня нет чётких комбобоксов.Но я хочу измерить мои выпадающие предметы.Как я могу получить ширину элементов в выпадающем списке во время выполнения.Мне нужно это, чтобы управлять шириной моего комбо.

Ответы [ 2 ]

5 голосов
/ 26 октября 2010

Если вы хотите сделать это и не уверены, что все ваши ComboBoxItems были сгенерированы, вы можете использовать этот код. Это расширит ComboBox в коде позади, и когда все ComboBoxItems в нем будут загружены, измерить их размер и затем закрыть ComboBox.

IExpandCollapseProvider находится в UIAutomationProvider

public void SetComboBoxWidthFromItems()
{
    double comboBoxWidth = c_comboBox.DesiredSize.Width;

    // Create the peer and provider to expand the c_comboBox in code behind.
    ComboBoxAutomationPeer peer = new ComboBoxAutomationPeer(c_comboBox);
    IExpandCollapseProvider provider = (IExpandCollapseProvider)peer.GetPattern(PatternInterface.ExpandCollapse);
    EventHandler eventHandler = null;
    eventHandler = new EventHandler(delegate
    {
        if (c_comboBox.IsDropDownOpen &&
            c_comboBox.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
        {
            double width = 0;
            foreach (var item in c_comboBox.Items)
            {
                ComboBoxItem comboBoxItem = c_comboBox.ItemContainerGenerator.ContainerFromItem(item) as ComboBoxItem;
                comboBoxItem.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
                if (comboBoxItem.DesiredSize.Width > width)
                {
                    width = comboBoxItem.DesiredSize.Width;
                }
            }
            c_comboBox.Width = comboBoxWidth + width;
            // Remove the event handler.
            c_comboBox.ItemContainerGenerator.StatusChanged -= eventHandler;
            c_comboBox.DropDownOpened -= eventHandler;
            provider.Collapse();
        }
    });
    // Anonymous delegate as event handler for ItemContainerGenerator.StatusChanged.
    c_comboBox.ItemContainerGenerator.StatusChanged += eventHandler;
    c_comboBox.DropDownOpened += eventHandler;
    // Expand the c_comboBox to generate all its ComboBoxItem's.
    provider.Expand();
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    SetComboBoxWidthFromItems();
}
0 голосов
/ 26 октября 2010

Попробуйте эту функцию:

foreach(var item in MyComboBox.Items){

    double width = item.ActualWidth;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...