подключение авторских тем WPF

WPF
  1. 6 года назад

    уважаемый автор, я пытаюсь подключить вашу тему, создав словари и подключив их в файле application.xaml, но возникает проблема загрузки дизайнера. все время выдается ошибка Initialization of 'System.Windows.Setter' threw an exception. и далее перечисляются исключения, а также ошибка Prefix 'property' does not map to a namespace. со своими исключениями. Как можно это исправить? Работаю в VS 2010.
    Заранее спасибо

  2. Alexandr_Erohin

    Nov 19 Администратор

    Дайте ссылку на пример проекта, посмотрю в чем проблема. (без кода не разобраться)

  3. http://narod.ru/disk/63829586001.841bb10690787bf474eb7adedebf0586/%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%20%D0%BA%D1%80.zip.html

  4. Alexandr_Erohin

    Nov 19 Администратор
    Добавлено 6 года назад Alexandr_Erohin

    Похоже это внутренняя ошибка дизайнера в VS 2010, потому что в VS2012 этой ошибки не возникает. Кстати при создании тем я дизайнер отключал, т.к. при большом количестве элементов на форме он начинал лагать. В VS2012 этих проблем нет, зато есть баг с фреймами (показан на скриншоте), при компиляции фрейм в окне отсутствует
    -image-

  5. а вы делали темы в 12-й версии?

  6. Alexandr_Erohin

    Nov 20 Администратор
    Добавлено 6 года назад Alexandr_Erohin

    Нет. в 10й, но с выключенным дизайнером (от дизайнера в VS толку мало, при сложной компоновке проекта элементы все равно коверкаются.)

  7. а как его отключить, я что-то не соображу.

  8. Alexandr_Erohin

    Nov 21 Администратор

    В меню Tools --> Options --> TextEditor --> XAML --> MIscellaneous поставить галочку "Always open documents in full XAML view" и перезапустить проект

  9. Добрый день!
    Спасибо за темы с иконками!
    при использовании тем с иконками возник вопрос: как сделать стиль для кнопки на основе Вашего стиля с переопределением некоторых элементнов стиля?

                <Style TargetType="ToggleButton" BasedOn="{StaticResource {x:Type ToggleButton}}" 
                       x:Key="St">
                    <Setter Property="Background" Value="{DynamicResource ResourceKey=UncheckedBrush}" />
                    <Style.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Background" Value="{DynamicResource ResourceKey=CheckedBrush}" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
    
                    <ToggleButton Padding="5" Width="30" Style="{StaticResource St}">
                        <ToggleButton.Content>
                            <Path Stretch="Fill" Data="{StaticResource exclamationStyle0}" Width="8" Height="20" Margin="0" 
                                  Fill="{StaticResource FillPath}" />
                        </ToggleButton.Content>
                        <ToggleButton.Resources>
                            <SolidColorBrush x:Key="CheckedBrush" Color="Red" />
                            <SolidColorBrush x:Key="UncheckedBrush" Color="Gray" />
                        </ToggleButton.Resources>
                    </ToggleButton>
    
                    <ToggleButton Padding="5" Width="30" Style="{StaticResource St}">
                        <ToggleButton.Content>
                            <Path Stretch="Fill" Data="{StaticResource exclamationStyle0}" Width="8" Height="20" Margin="0" 
                                  Fill="{StaticResource FillPath}" />
                        </ToggleButton.Content>
                        <ToggleButton.Resources>
                            <SolidColorBrush x:Key="CheckedBrush" Color="Yellow" />
                            <SolidColorBrush x:Key="UncheckedBrush" Color="Gray" />
                        </ToggleButton.Resources>
                    </ToggleButton>

    Необходимого эффекта удается достичь, если убрать BasedOn="{StaticResource {x:Type ToggleButton}}" а хотелось бне убирая.

  10. Alexandr_Erohin

    Nov 23 Администратор
    Добавлено 6 года назад Alexandr_Erohin

    При наследовании стиля с помощью BasedOn переопределять триггеры никак не получиться, т.к. они указаны в шаблоне элемента управления. Вам потребуется создавать отдельный шаблон для каждой кнопки, изменяя требуемые параметры (например цвет подсветки фона при значении IsChecked = True).

    Максимум, что позволяет WPF, это использование расширения разметки для изменения обычных свойств. Например, если в шаблоне ToggleButton изменить код:

    <Border x:Name="NormalElement" Background="{StaticResource ControlBackgroundNormal}" CornerRadius="2" ...

    на

    <Border x:Name="NormalElement" Background="{TemplateBinding Background}" CornerRadius="2" ...

    то вы сможете менять фон каждого ToggleButton просто задав для него свойство Background. При этом изменить цвет фона при наведении курсора на кнопку, или при изменении её состояния не получиться (у кнопки нет свойств типа BackgroundOver или BackgroundChecked, т.е. попросту данные значения не к чему привязывать). Поэтому я и рекомендую вам использовать отдельные шаблоны для каждого типа кнопок.

  11. Спасибо!

или зарегистрируйтесь чтобы ответить