PDA

View Full Version : سوال: نحوه تغییر تم و ظاهر برنامه در برنامه اجرایی توسط کاربر برنامه



mymina
دوشنبه 01 مهر 1392, 11:13 صبح
با سلام
می خواستم بدونم چطور می تونم برای برنامه چند استایل و تم مختلف برای برنامه تعریف کرد مثلا دو تم یکی رنگ آبی و تم دیگر به رنگ قرمز ، با انتخاب هر یک از اینها رنگ دکمه ها و پست زمینه برنامه تغییر کند

به طوریکه کاربری که با برنامه کار می کند امکان تغییر ظاهر برنامه با توجه به سلیقه خود را داشته باشد.

mymina
سه شنبه 02 مهر 1392, 10:51 صبح
کسی کمکی نکرد
می خوام کامل تر توضیح بدم
من برای برنامم دو تا فایل ResourceDictionary دارم که تمام استایل ها را در آن تعریف کردم و تنها رنگ پست زمینه و کنترل ها با هم دیگر فرق می کند و این ResourceDictionary را در قسمت app.xml تعریف کردم مانند کد زیر

<Application x:Class="Proje1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>

<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="StyleBlue.xaml" />
<ResourceDictionary Source="StyleRed.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

</Application.Resources>
</Application>



حال می خواهم کلید هایی در برنامه قرار دهم با کلید کاربر بر روی هر یک تم و استایل برنامه تغییر کند یعنی اگر کاربر رنگ قرمز را انتخاب کرد <ResourceDictionary Source="StyleRed.xaml" />
فعال شود و اگر رنگ آبی
<ResourceDictionary Source="StyleBlue.xaml" />

یعنی بتوان کدی نوشت که از طرق آن یکی از ResourceDictionary فعال شود

macsharp
یک شنبه 14 مهر 1392, 19:38 عصر
سلام
یه تغییراتی باید تو فایل استایلت بدی
استایل های سایت Codplex رو می تونی استفاده کنی
از تابع استفاده کن و مسیر فابل استایل رو بهش پاس بده

public void LoadStyleDictionaryFromFile(string inFileName)
{
if (File.Exists(inFileName))
{
try
{
using (var fs = new FileStream(inFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
// Read in ResourceDictionary File
var dic = (ResourceDictionary)XamlReader.Load(fs);
// Clear any previous dictionaries loaded
Resources.MergedDictionaries.Clear();
// Add in newly loaded Resource Dictionary
Resources.MergedDictionaries.Add(dic);
}
}
catch
{
}
}
}
به App.Xaml هم هیچی نمیخواد اضافه کنی
اگر خواستی هنگام شروع تم داشته باشه این خط کدها رو به فایل بالا اضافه کن

public static App Instance;
public static String Directory;
private String _DefaultStyle = "Black.xaml";

public App()
{
Instance = this;
Directory = Path.GetDirectoryName(System.Reflection.Assembly.G etExecutingAssembly().Location);
string stringsFile = Path.Combine(Directory, "Resources", _DefaultStyle); // مسیر فابل رو تولید میکنه که من تو پوشه Resources کنار فایل اجرایی برنامه گذاشتم
LoadStyleDictionaryFromFile(stringsFile);
}


پس فایل App.cs برنامه شما میتونه این شکلی باشه


using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;
using System.IO;
using System.Windows.Markup;
namespace testBTN
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public static App Instance;
public static String Directory;
private String _DefaultStyle = "Black.xaml";

public App()
{
Instance = this;
Directory = Path.GetDirectoryName(System.Reflection.Assembly.G etExecutingAssembly().Location);
string stringsFile = Path.Combine(Directory, "Resources", _DefaultStyle);
LoadStyleDictionaryFromFile(stringsFile);
}

public void LoadStyleDictionaryFromFile(string inFileName)
{
if (File.Exists(inFileName))
{
try
{
using (var fs = new FileStream(inFileName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
// Read in ResourceDictionary File
var dic = (ResourceDictionary)XamlReader.Load(fs);
// Clear any previous dictionaries loaded
Resources.MergedDictionaries.Clear();
// Add in newly loaded Resource Dictionary
Resources.MergedDictionaries.Add(dic);
}
}
catch
{
}
}
}
}
}

موفق باشی