referencia puede office microsoft agregar c# wpf class-library resourcedictionary

c# - puede - microsoft office interop excel



AƱadir ResourceDictionary a la biblioteca de clases (6)

Creé una biblioteca de clases que contiene WPF Windows y algunos controles de usuario heredados de mis clases de c # que me ayudan a personalizar ciertos controles de wpf.

Ahora quiero agregar ResourceDictionary, para ayudarme a compartir estilos entre mis clases de wpf. ¿Es posible?

Gracias.

EDITAR: archivo de diccionario de recursos ubicado en el proyecto MY.WpfPresentation.Main (llamado 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>

usándolo:

<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>


En mi opinión, la pregunta es acerca de agregar un archivo de diccionario de recursos de WPF a un proyecto de la biblioteca de clases. La respuesta es que no puede hacerlo para la Class Class Library clásica, sino para el proyecto WPF Application , el proyecto WPF Custom Control Library o la biblioteca WPF User Control Library . Para estos tipos de proyectos, puede agregar un nuevo Diccionario de recursos (WPF), opción que está disponible a través de la adición de un nuevo elemento al proyecto.

En mi opinión, el título de la pregunta y la pregunta en sí no corresponden a la respuesta aceptada.


La respuesta de @ punker76 es excelente y me ayudó mucho, pero vale la pena agregar que si crea un archivo vacío y le agrega una etiqueta de recurso, también debe ir a las propiedades del archivo, configurar BuildAction a Resource , Copy To ... to Do Copie y borre la propiedad CustomTool si está configurada.


Para transformar un proyecto de biblioteca clásica en un proyecto de biblioteca WPF (para agregar UserControls , Windows , ResourcesDictionaries , etc.) puede agregar el siguiente XML en el archivo .csproj en el primer nodo PropertyGroup:

<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Ejemplo completo:

<?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> <!-- ... -->


Sí. Puedes agregar un ResourceDictionary directamente a tu proyecto.

Cuando quiera usarlo, puede combinarlo en el XAML según sea necesario mediante el uso de MergedDictionaries para "fusionar" ese ResourceDictionary independiente en los recursos del tipo (es decir, la Ventana o UserControl).


Ya que no puedo comentar pero he usado esta respuesta dos veces ahora:

Para agregar a la respuesta de nmariot:

Consejo 1

para llegar al archivo .csproj desde visual studio

haga clic derecho en el proyecto -> haga clic en ''descargar proyecto''

haga clic derecho en el proyecto [en estado descargado] -> haga clic en ''editar'' nombre_archivo.csproj ''''

Consejo 2

para evitar advertencias de error una vez que se haya agregado el diccionario de recursos:

añadir referencia a System.Xaml


crear un diccionario de recursos como este

<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>

y puedes ponerlo donde quieras

<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>