Resource | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar resource

Windows 10 UWP uygulamasında Page.Resources içinde Style kullanmak

31 January 2016 Yorum yapılmamış

Windows 10 UWP uygulaması yazarken bazen ekranda stil verdiğimiz bir nesnenin stilini aynı tipteki diğer nesnelere de uygulamak isteriz.

Böyle bir durumda içinde bulunduğumuz Page‘in Resources kısmına stillerimizi ortak bir şekilde tanımlamak ve sayfanın içinde aynı tipteki nesnelerde kullanmak iyi bir çözüm yolu olabilir.

Bu makalede örnek olarak, saati gösterecek veya belli bir süreden geri sayım yapabilecek aşağıdaki sayfayı UWP ile tasarlayacağız;

Öncelikle sayfanın kodlarını aşağıdaki hale getirip temizleyelim;

<Page
	x:Class="PageResourceStyleOrnek.MainPage"
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	xmlns:local="using:PageResourceStyleOrnek">

</Page>

Sayfaya önce bir StackPanel nesnesi, StackPanel nesnesinin içerisine bir Grid nesnesi, Grid nesnesinin ColumnDefinitions özelliğine de 5 adet ColumnDefinition ekliyoruz.

Aynı şekilde Grid nesnesinin içerisine her Column‘a birer tane denk gelecek şekilde Border nesneleri ekliyoruz, Border nesnelerinin içerisine TextBlock veya StackPanel içerisinde TextBlock ekliyoruz.

Border nesnelerini kullanmamızın sebebi, TextBlock nesnesi tek başına arkaplan rengine sahip olamaz, eğer Border nesnesinin içerisine koyarsak, Border nesnesine verdiğimiz Background özelliği sayesinde bir arkaplan rengi olabilir.

<StackPanel Margin="10">
	<Grid>
		<Grid.ColumnDefinitions>
			<ColumnDefinition Width="*" />
			<ColumnDefinition Width="Auto" />
			<ColumnDefinition Width="*" />
			<ColumnDefinition Width="Auto" />
			<ColumnDefinition Width="*" />
		</Grid.ColumnDefinitions>

		<Border Grid.Column="0">
			<StackPanel Orientation="Horizontal">
				<TextBlock Text="0" />
				<TextBlock Text="0" />
			</StackPanel>
		</Border>
		<Border Grid.Column="1">
			<TextBlock Text=":" />
		</Border>
		<Border Grid.Column="2">
			<StackPanel Orientation="Horizontal">
				<TextBlock Text="0" />
				<TextBlock Text="0" />
			</StackPanel>
		</Border>
		<Border Grid.Column="3">
			<TextBlock Text=":" />
		</Border>
		<Border Grid.Column="4">
			<StackPanel Orientation="Horizontal">
				<TextBlock Text="0" />
				<TextBlock Text="0" />
			</StackPanel>
		</Border>

	</Grid>
</StackPanel>

Böylece tasarım anında ekranımız aşağıdaki gibi gözükecek;

İstediğimiz ekran tasarımına henüz sahip değiliz, fakat yaklaştık. Sayfada birçok nesnenin aynı şekilde gözükmesini istiyoruz, eğer hepsinde aynı özelliklere aynı değerleri verecek olursak aslında bunu elde edebiliriz. Fakat daha sonra değişiklik yapması zor olur, kodun karmaşıklığı artar, vs.

Sayfadaki Page elementinin içerisine Resources elementi ekler ve içerisine istediğimiz nesnelerin ortak sahip olacağı stilleri yazarsak bu problemlerin önüne geçmiş oluruz;

<Page.Resources>
	<Style TargetType="Border">
		<Setter Property="Background" Value="#e67e22" />
		<Setter Property="Padding" Value="10" />
	</Style>
	<Style TargetType="TextBlock">
		<Setter Property="FontSize" Value="20" />
		<Setter Property="Foreground" Value="White" />
		<Setter Property="Margin" Value="10" />
	</Style>
</Page.Resources>

Öncelikle Page.Resources elementini oluşturuyoruz, sayfadaki tüm Border nesneleri için hangi özelliklere hangi değeri atamak istiyorsak, Style elementi içerisinde Setter elementini kullanarak, Property ve Value değerlerine atamalar yapıyoruz.

Aynı şekilde sayfadaki tüm TextBlock nesneleri için de ortak özelliklere değer atamaları yapıyoruz.

Tüm Border ve TextBlock nesnelerine aynı değerleri tek tek atamak yerine, Page.Resources içerisinde ortak bir şekilde atamış olduk. Artık arkarengi değiştirmek istersek, tek bir yerden değiştirebileceğiz;

<Setter Property="Background" Value="#9b59b6" />

Windows Phone 8 seçili temayı ve tema renklerini bulma

07 August 2013 1 yorum

Windows Phone 7 ve Windows Phone 8, 2 adet arkaplan renk seçeneği (koyu ve açık) ve 20 adet vurgu renk seçeneği (Windows Phone 8 Tema Renkleri) ile birlikte geliyor.

Uygulama içerisinden kullanıcının tema (arkaplan ve vurgu renk) tercihini bulmamız gerekebilir.

Application.Current altında yeralan static Resources özelliği aracılığı ile renk değerlerine ulaşabiliriz;

var lightThemeVisibility = (Visibility)Application.Current.Resources["PhoneLightThemeVisibility"];

var darkThemeVisibility = (Visibility)Application.Current.Resources["PhoneDarkThemeVisibility"];

var backgroundColor = (Color)Application.Current.Resources["PhoneBackgroundColor"];

var accentBrush = (SolidColorBrush)Resources["PhoneAccentBrush"];

var accentColor = (Color)Application.Current.Resources["PhoneAccentColor"];

Proje Yönetimi (Project Management) Nedir?

02 March 2013 Yorum yapılmamış

İş yaşantımızda sıklıkla duyduğumuz Proje, Benzersiz bir ürün veya hizmet oluşturmak için yürütülen geçici bir girişimdir.

Bir çalışmanın proje olması için başlangıç ve bitiş zamanları olması lazım, aksi taktirde çalışma proje olarak değil, operasyon olarak değerlendirilmelidir.

Proje ve Operasyon faaliyetlerinin özellikleri;

Operasyon

  • Sınırlı sayıda kaynak tarafından gerçekleştirilir (insan-makina-yazılım-vs.)
  • Hiç değişmeden yada az değişikliğe uğrayarak tekrarlar
  • Sürekliliği vardır
  • Daha önce yapılmış olabilir, daha sonra da tekrarlama olasılığı vardır
  • Tüm faaliyet belirli/tanımlıdır

Proje

  • Sınırlı sayıda kaynak tarafından gerçekleştirilir (insan-makina-yazılım-vs.)
  • Tamamen yenidir
  • Bir defaya mahsus gerçekleştirilir
  • Zamanla gelişim gösterir
  • Daha önce yapılmamış olmalıdır
  • Daha sonra birebir aynı şekilde yapılamama
  • Tüm faaliyet belirli/tanımlı değildir

Proje Yönetimi, proje faaliyetlerinin proje hedeflerine ulaşmak için planlanması, raporlanması ve kontrolüdür. Bu faaliyetler gerçekleştirilirken performans, maliyet, zaman sınırlamaları içinde kalınması ve proje büyüklüğünün kabul edilebilir sınırlar içerisinde tutulması gerekmektedir.

Proje Yönetimi süreçlerinin şirketlerde daha fazla karşılaşılır olması özellikle aşağıdaki sebeplerden kaynaklanmaktadır;

  • Projelerin daha kapsamlı olması
  • Küreselleşmenin getirdiği rekabet ortamı
  • İletişimdeki zorlukların artması

Proje Yönetimi faaliyetlerinin şirketlere kazandırdıkları;

  • Kaynakların daha efektif yönetilmesi
  • Toplam kalite’de iyileşme
  • Karlılığın artması
  • Risklere ve Fırsatlara karşı hazırlıklı olmak
  • Daha gerçekçi hedefler belirlenebilir

Dünya’nın en büyük kar-amacı-gütmeyen organizasyonlarından biri olan PMI‘ın (Project Management Institute) resmi yayını olan PMBOK‘a (Project Management Body of Knowledge) göre Proje Yönetimi Süreçleri (Processes) aşağıdaki 5 madde’de toplanmıştır;

  • Başlangıç (Initiating)
  • Planlama (Planning)
  • Yürütme (Executing)
  • İzleme ve Kontrol (Monitoring and Controlling)
  • Kapanış (Closing)

PMBOK‘ta tanımlanan 9 adet Bilgi Alanı (Knowledge Area) vardır;

  • Entegrasyon (Integration)
  • Kapsam (Scope)
  • Zaman (Time)
  • Maliyet (Cost)
  • Kalite (Quality)
  • İnsan Kaynakları (Human Resources)
  • İletişim (Communications)
  • Risk (Risk Management)
  • Tedarik (Procurement)

Windows Phone 8 Static Resource Text Style listesi

19 December 2012 Yorum yapılmamış

Windows Phone 8 için static resource text style listesini görebileceğimiz bir uygulama geliştireceğiz.

Öncelikle TextStyles isimli yeni bir Windows Phone App projesi oluşturalım;

Text Styles Windows Phone Application Project

Proje oluşturduktan sonra gelen Windows Phone Platform versiyon seçim penceresinde Windows Phone OS 8.0 seçeneğinin seçili olduğundan emin olmalıyız;

Windows Phone 8.0 SDK

MainPage.xaml dosyasını aşağıdaki gibi güncelleyelim;

<Grid x:Name="LayoutRoot" Background="Transparent">
	<Grid.RowDefinitions>
		<RowDefinition Height="Auto"/>
	</Grid.RowDefinitions>

	<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
		<TextBlock Text="TEXT STYLE 1" Style="{StaticResource PhoneTextBlockBase}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 2" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 3" Style="{StaticResource PhoneTextSubtleStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 4" Style="{StaticResource PhoneTextTitle1Style}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 5" Style="{StaticResource PhoneTextTitle2Style}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 6" Style="{StaticResource PhoneTextTitle3Style}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 7" Style="{StaticResource PhoneTextSmallStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 8" Style="{StaticResource PhoneTextLargeStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 9" Style="{StaticResource PhoneTextExtraLargeStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 10" Style="{StaticResource PhoneTextGroupHeaderStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 11" Style="{StaticResource PhoneTextContrastStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 12" Style="{StaticResource PhoneTextAccentStyle}" Margin="12,0"/>
		<TextBlock Text="TEXT STYLE 12" Style="{StaticResource PhoneTextHugeStyle}" Margin="12,0"/>
	</StackPanel>
</Grid>

StaticResource olarak kullanabileceğimiz ThemeStyle‘ların ve TextStyle‘ların listesine MSDN‘de yer alan Theme Resources for Windows Phone sayfasından erişebiliriz.

Uygulamayı çalıştırdığımızda aşağıdaki ekran görüntüsünü görüyor olmamız lazım;

Text Styles Windows Phone 8 Application

Projenin kodlarını buradan indirebilirsiniz.

Windows Phone 8 için Radyo Frekansları uygulaması

19 December 2012 Yorum yapılmamış

Windows Phone 8 için şehir-şehir radyo frekanslarını görebileceğimiz bir uygulama geliştireceğiz.

Bu uygulamanın geliştirilmesi sırasında Pivot, PivotItem, LongListSelector, DataTemplate, WebClient gibi sınıfları kullandığımız kodlar yazacağız.

Öncelikle RadyoListe isimli yeni bir Windows Phone App projesi oluşturalım;

Windows Phone App Project

Proje oluşturduktan sonra gelen Windows Phone Platform versiyon seçim penceresinde Windows Phone OS 8.0 seçeneğinin seçili olduğundan emin olmalıyız;

Windows Phone 8.0 SDK

Uygulama ihtiyaç duyduğu veriyi internetten indireceği için WMAppManifest.xml dosyasında Network erişim izninin istenmiş olması gerekiyor;

<Capabilities>
	<Capability Name="ID_CAP_NETWORKING" />
</Capabilities>

Radyo listesi için json formatında hazırladığım veriyi kendi sunucuma radyolar.json ismi ile yükledim.

Json formatında okuyacağımız bu veriyi işlemek için References içerisine Newtonsoft Json.Net (4.5.11) Nuget paketini eklemeliyiz;

Newtonsoft Json.Net Nuget Package

Models isminde bir dizin ekleyip, içerisinde LiveData, City, Channel, Frequency isimli sınıflar oluşturalım;

LiveData.cs

public class LiveData
{
	public IEnumerable<City> Cities { get; private set; }

	public IEnumerable<Channel> Channels { get; private set; }

	public IEnumerable<Frequency> Frequencies { get; private set; }

	public LiveData()
	{
		this.Cities = new List<City>();
		this.Channels = new List<Channel>();
		this.Frequencies = new List<Frequency>();
	}

	public LiveData(string LiveDataResponse)
	{
		var LiveDataResult = JsonConvert.DeserializeObject<LiveData>(LiveDataResponse);

		this.Cities = LiveDataResult.Cities;
		this.Channels = LiveDataResult.Channels;
		this.Frequencies = LiveDataResult.Frequencies;
	}
}

City.cs

public class City
{
	public int ID { get; set; }

	public string Name { get; set; }
}

Channel.cs

public class Channel
{
	public int ID { get; set; }

	public string Name { get; set; }
}

Frequency.cs

public class Frequency
{
	public int CityID { get; set; }

	public int ChannelID { get; set; }

	public float No { get; set; }
}

Uygulama ilk açıldığında çalıştırılan App (App.xaml.cs) sınıfına aşağıdaki kodları ekleyelim;

public static Action DataLoaded;

public static LiveData ViewModel = null;

public async static void LoadData()
{
	WebClient wc = new WebClient();

	wc.DownloadStringCompleted += (s, e) =>
	{
		if (e.Error == null)
		{
			ViewModel = new LiveData(e.Result);

			if (DataLoaded != null)
			{
				DataLoaded();
			}
		}
	};

	wc.DownloadStringAsync(new Uri("http://www.enginpolat.com/application-data/radyolar.json"));
}

App sınıfının constructor’ında LoadData() method’unu çağıralım;

LoadData();

Kodları inceleyecek olursak;

Sınıf seviyesinde tanımlanan LiveData tipindeki ViewModel değişkeni, LoadData() method’u içerisinde asenkron olarak doldurulur. ViewModel değişkenine değer ataması yapıldıktan sonra DataLoaded action‘ını dinleyen bir method varsa tetiklenir.

Bu sayede uygulamanın açılışı esnasında internetten verinin indirilmesi ve deserialize edilmesi asenkron olarak yapılmış olur.

MainPage.xaml dosyasında ekranda sadece bir Pivot kontrolünün gösterilmesini sağlayalım;

<Grid x:Name="LayoutRoot" Background="Transparent">
	<Grid.RowDefinitions>
		<RowDefinition Height="*"/>
	</Grid.RowDefinitions>
	<phone:Pivot Margin="0,10,10,10" Title="Radyo Listesi" Name="pvtSehirListesi" Grid.RowSpan="1" />
</Grid>

Artık MainPage.xaml.cs dosyasındaki constructor‘a giderek ekranı dolduracak kodları yazabiliriz;

App.DataLoaded = () =>
{
	foreach (City Sehir in App.ViewModel.Cities)
	{
		PivotItem pi = new PivotItem();
		pi.Header = Sehir.Name;

		LongListSelector list = new LongListSelector();
		list.ItemTemplate = Application.Current.Resources["FrequencyListItemTemplate"] as DataTemplate;
		list.ItemsSource = (from Frekans in App.ViewModel.Frequencies
			join Kanal in App.ViewModel.Channels on Frekans.ChannelID equals Kanal.ID
			where Frekans.CityID == Sehir.ID
			select new { ChannelName = Kanal.Name, Frequency = Frekans.No.ToString("00.0") }).ToList();

		pi.Content = list;

		pvtSehirListesi.Items.Add(pi);
	}
};

Böylece App sınıfında, ViewModel değişkenine değer yükledikten sonra tetiklediğimiz Action içerisinde bir foreach döngüsü çağırmış oluyoruz.

Döngü içerisinde ilk önce yeni bir PivotItem tipinde değişken oluşturuyoruz ve Header özelliğine döngü değişkeninden elde ettiğimiz şehir ismi bilgisini atıyoruz.

PivotItem tipindeki değişkenin Content özelliğine, LongListSelector tipinde yeni bir değişken atıyoruz.

LongListSelector tipindeki değişkenin ItemsSource özelliğine App.ViewModel değişkenindeki değerlerden LINQ Expression ile oluşturduğumuz listeyi atıyoruz.

Aynı şekilde LongListSelector tipindeki değişkenin ItemTemplate özelliğine

Application.Current.Resources["FrequencyListItemTemplate"] as DataTemplate;

değerini atıyoruz.

Son olarak, App.xaml dosyasına FrequencyListItemTemplate ismindeki Resource‘u ekliyoruz;

<Application.Resources>
	<DataTemplate x:Name="FrequencyListItemTemplate">
		<StackPanel Margin="0,0,0,17">
			<TextBlock Text="{Binding ChannelName}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
			<TextBlock Text="{Binding Frequency}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
		</StackPanel>
	</DataTemplate>
</Application.Resources>

Uygulamayı çalıştırdığımızda aşağıdaki ekran görüntüsünü görüyor olmamız lazım;

Radyo Liste Windows Phone 8 Application

Projenin kodlarını buradan indirebilirsiniz.