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>