Динамическое переключение элементов управления пользовательского интерфейса WPF - PullRequest
0 голосов
/ 27 сентября 2019

Мне нужно разработать простое приложение WPF.В окне пользовательского интерфейса есть метки и текстовые блоки влево и кнопки вправо.

Рисунок 1

На основе настроек конфигурации (независимо от того, является ли пользовательлевша или правша) Мне нужно переключить элементы управления, кнопки влево и метки и текстовые блоки вправо.

Рисунок 2

Можете ли выпожалуйста, порекомендуйте хороший способ удовлетворить это требование?

Ответы [ 3 ]

0 голосов
/ 27 сентября 2019

Зависит от того, какая область приложения, вероятно, будет.

2 альтернативы:

1)

Я думаю, вероятно, что по мере роста приложения будетбольше, чем просто кнопки.

Я бы, вероятно, создал пользовательский контроль, который инкапсулирует это поведение для метки и элемента управления.Usercontrol использует статический элемент, чтобы решить, где размещены текстовые блоки, но будет выглядеть примерно так:можно поместить любой элемент управления (например, кнопку) «в» и установить свойство зависимости для метки.

2)

Определить 2 шаблона contentcontrol, аналогичных используемому в этом:

https://social.technet.microsoft.com/wiki/contents/articles/28597.aspx

Поместите их в отдельные словари ресурсов и задайте им один и тот же ключ.

Объедините в application.current.resources соответствующий словарь ресурсов и, следовательно, стиль.

Учитывая, что это настройка приложения, возможно, это вещь для запуска.Люди не просто динамически меняют свои «руки».Таким образом, вы могли бы использовать их в качестве статического ресурса.Если они реально собираются измениться во время выполнения, то я думаю, что это будет немного сложнее, потому что вам нужно будет принудительно перерисовать представление.

0 голосов
/ 30 сентября 2019

Может быть, не самый лучший способ, но мне удалось добиться этого с помощью сетки в соответствии с вашими предложениями.Спасибо всем за ваш ценный отзыв.

Я переключил столбцы и соответственно изменил ширину.

        if (AppSettings.IsLeft)
        {
            parentGrid.ColumnDefinitions[0].Width = new GridLength(400, GridUnitType.Pixel);
            parentGrid.ColumnDefinitions[1].Width = new GridLength(1, GridUnitType.Star);

            Grid.SetColumn(buttonGrid,0);
            Grid.SetRow(buttonGrid,0);

            Grid.SetColumn(contentGrid,1);
            Grid.SetRow(contentGrid,0);
        }
0 голосов
/ 27 сентября 2019

2 Шаблоны - это, вероятно, правильное и стильное решение здесь, как сказал @RajN.

Также вы можете определить сетку из 2 столбцов и соответственно переключить свойство 'Grid.Column' каждого элемента управления

...