WPF Designer продолжает падать, когда я помещаю StackPanels в свои ComboBoxItems - PullRequest
0 голосов
/ 17 октября 2018

Я пользуюсь WPF уже около 8 месяцев, и мне это очень удобно.Используя некоторые вопросы и обсуждения, которые я нашел здесь, я узнал, как сделать мои ComboBoxы еще более выдающимися.но вот в чем дело, чтобы поместить изображения и эти элементы в элемент ComboBox, мне нужно будет обернуть их в Panel (будь то StackPanel или WrapPanel), но всякий раз, когда я это делаю, дизайнер не загружает ихправильно вообще или просто вылетает.Все отлично показывает, когда приложение запускается

Вот мой код, ничего необычного.И я использую этот стиль , который хранится в словаре ресурсов.Есть ли способ сделать код лучше или дизайнер просто недостаточно умен?

<!-- COmbo Box -->
            <ComboBox Margin="0 5 15 0" SelectedIndex="0">

                <!-- All Items -->
                <ComboBox.Items>

                    <!-- General -->
                    <ComboBoxItem Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/feedstar.png" Height="10" />

                                <!-- Text -->
                                <TextBlock Margin="10 0 0 0">
                                    General Support Request
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem>

                    <!-- Display -->
                    <ComboBoxItem x:Name="CmbBxDisplay" Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/monitor.png" Height="10" />

                                <!-- Text -->
                                <TextBlock Margin="10 0 0 0">
                                    Monitor/ Display Issues
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem>

                    <!-- Sound -->
                    <ComboBoxItem Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/sound.png" Height="10" />

                                <!-- Text -->
                                <TextBlock Margin="10 0 0 0">
                                    Sound Issues
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem>

                    <!-- My Accoount -->
                    <ComboBoxItem Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/admin.png" Height="10" />

                                <!-- Text -->
                                <TextBlock Margin="10 0 0 0">
                                    My Account
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem>

                    <!-- Membership Support -->
                    <ComboBoxItem Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/memship.png" Height="15" />

                                <!-- Text -->
                                <TextBlock Margin="5 0 0 0">
                                    Membership Support
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem>

                    <!-- Contact Support -->
                    <ComboBoxItem Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/contacts.png" Height="15" />

                                <!-- Text -->
                                <TextBlock Margin="5 0 0 0">
                                    Contacts Support
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem>

                    <!-- Divine Service -->
                    <ComboBoxItem Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/bible.png" Height="15" />

                                <!-- Text -->
                                <TextBlock Margin="10 0 0 0">
                                    Divine Service
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem> <!-- End divine service -->

                    <!-- Announcements -->
                    <ComboBoxItem Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/announcement.png" Height="15" />

                                <!-- Text -->
                                <TextBlock Margin="5 0 0 0">
                                    Announcements Support
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem>     <!-- ENd Announcements -->

                    <!-- Reports and Audits -->
                    <ComboBoxItem Margin="5 0 0 0">

                        <!-- Content -->
                        <ComboBoxItem.Content>

                            <!-- Panel -->
                            <StackPanel Orientation="Horizontal">

                                <!-- Image -->
                                <Image Source="/Icons/Support Ticket/statistics.png" Height="15" />

                                <!-- Text -->
                                <TextBlock Margin="5 0 0 0">
                                    Audits and Report Generating Assistance
                                </TextBlock>
                            </StackPanel>
                        </ComboBoxItem.Content>
                    </ComboBoxItem>

                </ComboBox.Items>
            </ComboBox>

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Если вы не используете Visual Studio 2017, установите и протестируйте его.Если вы используете VS2017, убедитесь, что у вас установлена ​​последняя версия, щелкнув желтый флажок и открыв диалоговое окно обновления.

0 голосов
/ 17 октября 2018

ComboBox наследуется косвенно от ItemsComntrol.Для эффективного отображения вашего контента на ItemsControl вы должны установить макет для контента вашего элемента на ItemTemplate класса ItemsControl, который был получен (в данном случае ComboBox).

Обзор шаблонов данных В статье Microsoft описывается, как использовать шаблоны данных для определения макета для отображения вашего контента в WPF.

Определение DataTemplate для отображения вашего контента на ComboBox было бы так просто:

<ComboBox>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding Path=MyImageSource}" Height="15"/>
                <TextBlock Margin="5 0 0 0" Text="{Binding Path=MyText}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Теперь, чтобы использовать это правильно, вам просто нужен класс, подобный этому:

public class MyCoolData
{
    public ImageSource MyImageSource { get; set; }
    public string MyText { get; set; }
}

Затем вы можете получить некоторую коллекцию с MyCoolData объекты и задайте его как значение вашего ComboBox свойства ItemsSource или, альтернативно, вы можете вручную добавить или удалить MyCoolData объекты непосредственно в Items свойстве ComboBox.В приведенной выше статье Microsoft приведено несколько примеров.Или, чтобы добавить свои MyCoolData объекты в ComboBox, вы можете просто объявить их в XAML, как показано в следующем примере:

<ComboBox>
    <local:MyCoolData MyText="My first item" MyImageSource="MyFirstImage.png"/>
    <local:MyCoolData MyText="My second item" MyImageSource="MySecondImage.jpg"/>
    <local:MyCoolData MyText="Another one" MyImageSource="CoolImage.png"/>
</ComboBox>

Обратите внимание, что приведенные выше примеры позволяют вамиметь свой собственный объект (в данном случае, объект MyCoolData) и использовать его непосредственно как элемент в ComboBox.Механизм шаблонизации данных ComboBox (предоставляется ItemsControl) позаботится о создании макета для правильного отображения объекта MyCoolData в виде ComboBoxItem.Механизм шаблонов данных использует DataTemplate, который мы определили в приведенном выше примере, чтобы знать, как отображать ваш объект, и при необходимости создает элементы макета для каждого из ваших MyCoolData объектов.В итоге это становится более эффективным, потому что вы пишете меньше кода и упрощаете его изменение, а также позволяет более эффективно использовать виртуализированные панели, если бы это было так.

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