2013-07-23 17 views
10

Utworzono bibliotekę kontrolną użytkownika i użyłem w niej pliku ResourceDictionary. Teraz chcę użyć mojej kontroli użytkownika w aplikacji WPF, ale muszę ponownie dodać plik ResourceDictionary w moim projekcie! Jeśli go nie dodaję, przyniesie plik ResourceDictionary i wyświetla błąd w bloku MergeDictionaries! Czy brakuje mi czegoś !?Dodawanie słowników zasobów do biblioteki kontroli użytkownika w wpf

słowniku zasobów jest:

<ControlTemplate x:Key="MoveThumbTemplate" TargetType="{x:Type s:MoveThumb}"> 
     <Rectangle Fill="Transparent" Cursor="Hand"/> 
    </ControlTemplate> 

    <Style x:Key="ItemStyle" TargetType="ContentControl"> 
     <Setter Property="Width" Value="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Canvas}},Path=ActualWidth}"/> 
     <Setter Property="MinHeight" Value="60"/> 
     <Setter Property="Height" Value="60"/> 
     <Setter Property="Content" Value="MyTextBox"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ContentControl"> 
        <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}"> 
         <s:MoveThumb Template="{DynamicResource MoveThumbTemplate}"/> 
         <ContentPresenter Name="MainControl" Content="{TemplateBinding ContentControl.Content}" 
              Margin="5,0,10,0"/> 
         <Grid Opacity="0" Margin="-3"> 
          <s:ResizeThumb Height="3" Cursor="SizeNS" VerticalAlignment="Top" HorizontalAlignment="Stretch"/> 
          <s:ResizeThumb Height="3" Cursor="SizeNS" VerticalAlignment="Bottom" HorizontalAlignment="Stretch"/> 
         </Grid> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style>  
</ResourceDictionary> 

dodanie do kontroli użytkownika:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Resources/MoveResizeThumb.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 

Odpowiedz

19

spróbuj tego:

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/{YourAssemblyWhereResourceDictionaryIsLocated};component/Resources/MoveResizeThumb.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 
+2

ta nie działa dla mnie i to doprowadza mnie absolutnie szalony, bo wszędzie mówią to działa - ale nie robi! – ThisHandleNotInUse

+2

Wymaga to również klucza do dykcji – OliverAssad

+0

Należy pamiętać, że wszystkie inne zasoby muszą znajdować się w tagu lub spowoduje to błąd "zestaw zasobów więcej niż jeden raz" – SlapY

2

W odpowiedzi na komentarze @ThisHandleNotInUse i @OliverAssad w zaakceptowanym answer.

W przypadku x:Key attribute required błędu, znacznik ResourceDictionary powinno zostać zmienione w następujący sposób:

<UserControl.Resources x:Key="myKey"> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="pack://application:,,,/{YourAssemblyWhereResourceDictionaryIsLocated};component/Resources/MoveResizeThumb.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</UserControl.Resources> 
Powiązane problemy