WPFウィンドウと、特定のwpfコントロールのカスタマイズに役立つc#クラスから継承された一部のユーザーコントロールを含むクラスライブラリを作成しました。
次に、ResourceDictionaryを追加して、wpfクラス間でスタイルを共有できるようにします。出来ますか?
THX。
編集:MY.WpfPresentation.Mainプロジェクト(Styles.xamlという名前)にあるリソースディクショナリファイル:
<ResourceDictionary xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
xmlns:MYNetMisc="clr-namespace:MY.Net.Misc;Assembly=MY.Net"
>
<Style x:Key="customRowStyle" BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="{x:Type dxg:GridRowContent}">
<Setter Property="Foreground" Value="{Binding Path=DataContext.balance, Converter={MYNetMisc:BalanceToColor OnlyNegative=false}}" />
</Style>
</ResourceDictionary>
それを使う:
<MYNetPresentation:frmDockBase.Resources>
<ResourceDictionary x:Key="style">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MY.WpfPresentation.Main;component/Styles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<DataTemplate x:Key="TabTemplate">
<dxlc:LayoutControl Padding="0" ScrollBars="None" Background="Transparent">
<Image Source="/Images/Icons/table-32x32.png" Width="12" Height="12" />
<TextBlock Text="{Binding}" HorizontalAlignment="Left" VerticalAlignment="Center" />
</dxlc:LayoutControl>
</DataTemplate>
</MYNetPresentation:frmDockBase.Resources>
このようなリソースディクショナリを作成する
<ResourceDictionary xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- Common base theme -->
<ResourceDictionary Source="pack://application:,,,/Another.AssemblyName;component/YourResDictionaryFolder/OtherStyles.xaml" />
<ResourceDictionary Source="pack://application:,,,/Another.AssemblyName;component/YourResDictionaryFolder/AnotherStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
<!-- store here your styles -->
</ResourceDictionary>
そして、あなたはそれをあなたが望む場所に置くことができます
<Window x:Class="DragMoveForms.Window2"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
Title="Window2"
Height="300"
Width="300">
<Window.Resources>
<ResourceDictionary Source="pack://application:,,,/Your.Base.AssemblyName;component/YourResDictionaryFolder/Dictionary1.xaml" />
</Window.Resources>
<Grid>
</Grid>
</Window>
従来のライブラリプロジェクトをWPFライブラリプロジェクトに変換するには(UserControls
、Windows
、ResourcesDictionaries
などを追加するため)、次のXMLを.csprojに追加できます。最初のPropertyGroup内のファイルNode:
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
完全な例:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{50E8AAEA-5CED-46BE-AC9A-B7EEF9F5D4C9}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WpfApplication2</RootNamespace>
<AssemblyName>WpfApplication2</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
</PropertyGroup>
<!-- ... -->
@ punker76の answer は素晴らしいですし、多くの助けになりましたが、空のファイルを作成してリソースタグをそのファイルに追加する場合は、ファイルのプロパティに移動してBuildActiontoResource、コピー先...toDo not copyand clear CustomTool property if it's set。
私の意見では、問題はクラスライブラリプロジェクトにWPFリソースディクショナリファイルを追加することに関するものです。答えは、クラシッククラスライブラリの場合はできませんが、WPFアプリケーションプロジェクトの場合、WPFカスタムコントロールライブラリプロジェクトまたは- WPFユーザーコントロールライブラリ。これらのプロジェクトタイプでは、新しいリソースディクショナリ(WPF)を追加できます。このオプションは、プロジェクトに新しいアイテムを追加することで利用できます。
私の意見では、実際の質問のタイトルと質問自体は、受け入れられた回答に対応していません。
辞書を作成しようとしたときにResource Dictionary(WPF)ファイルタイプが見つからない場合は、次のようにします。
次の行をプロジェクトファイル(.csproj)の最初の<PropertyGroup>
要素に追加します。
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
プロジェクトをリロードします。 Resource Dictionary(WPF)を含む、通常のWPFプロジェクトで見つかるすべての項目タイプが揃ったはずです。
コメントはまだできませんが、この回答を2回使用しました。
Nmariotの回答に追加するには:
ヒント1
visual Studioから.csprojファイルにアクセスする
プロジェクトを右クリック->「プロジェクトのアンロード」をクリック
プロジェクトを右クリック[アンロード状態]-> [編集 'filename.csproj]をクリック
ヒント2
リソースディクショナリが追加された後のエラー警告を回避するには:
system.Xamlへの参照を追加する
はい。 ResourceDictionaryをプロジェクトに直接追加できます。
使用したい場合は、必要に応じて MergedDictionaries を使用してXAMLにマージし、スタンドアロンのResourceDictionary
をタイプのリソース(つまり、ウィンドウまたはUserControl)。