Стиль WPF: ресурс не найден; ResourceKey - PullRequest
0 голосов
/ 14 июля 2020

У меня есть несколько стилей и шаблонов в App.Xaml, поэтому я могу получить к ним доступ через несколько UserControls.

РЕДАКТИРОВАТЬ: Это в приложении. Xaml:

Один из стилей это:

<Application x:Class="BaseRefence.generatingAnnotation.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:BaseRefence.generatingAnnotation"
             xmlns:Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero2"
             StartupUri="MainWindow.xaml">
<Application.Resources>
<Style x:Key="ComboBoxStyleRounded" TargetType="{x:Type ComboBox}">
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type TextBox}">
            <Grid>
               <Border CornerRadius="25"
                       BorderThickness="1,1,2,2">
               </Border>
            </Grid>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
   <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
   <Setter Property="Background" Value="{StaticResource ComboBox.Static.Background}"/>
   <Setter Property="BorderBrush" Value="#42536b"/>
   <Setter Property="Foreground" Value="Black"/>
   <Setter Property="BorderThickness" Value="1,1,2,2"/>
   <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
   <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
   <Setter Property="Padding" Value="6,3,5,3"/>
   <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
   <Setter Property="ScrollViewer.PanningMode" Value="Both"/>
   <Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
   <Setter Property="Template" Value="{StaticResource ComboBoxTemplate}"/>
   <Style.Triggers>
      <Trigger Property="IsEditable" Value="true">
         <Setter Property="IsTabStop" Value="false"/>
         <Setter Property="Padding" Value="2"/>
         <Setter Property="Template" Value="{StaticResource ComboBoxEditableTemplate}"/>
      </Trigger>
   </Style.Triggers>
</Style>
</Application.Resources>
</Application>

А в de UserControl.Xaml у меня есть:

<ComboBox ItemsSource="{Binding ViewFamilyTypesInProject}"                                                              
          SelectedItem="{Binding SelectedViewFamilyType, Mode=TwoWay}"
          Grid.Row="1"
          Grid.Column="1"
          Margin="10 5"
          MaxHeight="40"
          Style="{DynamicResource ComboBoxStyleRounded}">

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

System.Windows.ResourceDictionary Warning: 9 : Resource not found; ResourceKey='ComboBoxStyleRounded'

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Мой опыт: у меня часто возникают одни и те же проблемы (с использованием VS 16.6.2,. NET Core 3.1 и WPF).

Просто закройте Visual Studio и перезапустите ее: в 98% случаев ошибка исчезает ( снова появится когда-нибудь в будущем).

0 голосов
/ 14 июля 2020

У вас неверный Style. Он может компилироваться, поскольку XAML синтаксически верен, но семантика разметки неверна. Поскольку вы ссылаетесь на Style, используя DynamicResource, ошибка возникает во время выполнения. Но мне интересно, почему не появляется ошибка конструктора XAML.

Вы дважды устанавливаете свойство ComboBox.Template. Более того, что наиболее важно, первая ControlTemplate в верхней части Style нацелена на неправильный тип TextBox:

<ControlTemplate TargetType="{x:Type TextBox}">
  <Grid>
    <Border CornerRadius="25"
            BorderThickness="1,1,2,2">
    </Border>
  </Grid>
</ControlTemplate>

Тип, конечно, должен быть <ControlTemplate TargetType="ComboBox">.

Поскольку вы ссылаетесь на ресурс ControlTemplate позже

<Setter Property="Template" Value="{StaticResource ComboBoxTemplate}" />

, я думаю, вы хотите удалить первый ControlTemplate. Если вы хотите изменить внешний вид TextBox, вам нужно будет полностью переопределить ControlTemplate из ComboBox. Вы можете запустить Clean Solution и Rebuild Solution.

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