Zordering с пользовательскими элементами в списке - Silverlight - PullRequest
1 голос
/ 01 октября 2010

Я готовлю пользовательскую кнопку. Этот скриншот будет полезен. Нет проблем с кнопкой, как видно на изображении, потому что значок висит слева. Но если я хочу, чтобы значок висел справа, то следующий элемент в списке будет скрывать те части значка, которые выходят за пределы его контейнера (ширина кнопки). Теперь я не могу это исправить с помощью zordering, верно? Потому что это относится только к упорядочению внутри его контейнера, в этом случае ListBoxItem. Здесь что-нибудь можно сделать? К вашему сведению, я надеюсь избежать обходного пути, такого как достаточно большие поля, чтобы освободить место для значков. У меня есть еще одна пользовательская кнопка , текст которой можно редактировать, и расширение TextBox, используемое для ввода введенного текста, будет значительно шире, чем основная кнопка.

1 Ответ

0 голосов
/ 01 октября 2010

Вам необходимо добавить ZIndex к самому содержащему ListBoxItem.Один подход, который может работать для небольшого набора элементов, это создать новый тип ListBox.

public class ZOrderedListBox : ListBox
{
    private int _ZIndex = 0;

    protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
    {
        base.PrepareContainerForItemOverride(element, item);
        Canvas.SetZIndex((UIElement)element, _ZIndex--);
    }
}

Приведенное выше ZorderedListBox назначит нисходящий ZIndex, так что более ранние элементы имеют более высокий zindex, чем более поздние. Предостережение Это упрощенное решение работает только с StackPanel в качестве панели элементов, оно не будет работать со стандартным VirtualizingStackPanel, что потребует большей сложности.

...