月別アーカイブ: 2013年6月

[WPF]プログレスバーの色を変更する

プログレスバーの進捗状態を示す色を変更するのに四苦八苦しましたので、
こうすれば出来る!ってのをメモっておきます。
つーか、初めからForegrooundで指定した色がそのまま出てくれればいいのになぁ。

最初にxamlの中にリソース定義を記述します。
この例ではPage.Resourcesですが、Windowの時はWindow.Resourcesです。


<Page.Resources>
   <Style x:Key="ProgressBarStyle" TargetType="ProgressBar">
   <Setter Property="Template">
   <Setter.Value>
   <ControlTemplate TargetType="ProgressBar">
             <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1" CornerRadius="2" Padding="1">
           <Grid x:Name="PART_Track" >
               <Rectangle x:Name="PART_Indicator"  HorizontalAlignment="Left" RadiusX="2" RadiusY="2" Fill="{TemplateBinding Foreground}">
               </Rectangle>
           </Grid>
             </Border>
   </ControlTemplate>
   </Setter.Value>
   </Setter>
   </Style>
</Page.Resources>

これを記述したらプログレスバーを定義するわけです。
上のテンプレートはプログレスバーに定義した Background、Foreground、BorderBrush の設定を使って
描画しますのでそれぞれ定義します。
この例では背景を黒、進捗を示す部位は赤のグラデーションで定義しています。

<ProgressBar Height="10" HorizontalAlignment="Stretch" Name="progressBar1" Background="#FF141012"
     Style="{StaticResource ProgressBarStyle}">
     <ProgressBar.Foreground>
          <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
               <GradientStop Color="Black" Offset="0" />
               <GradientStop Color="#FFEF4343" Offset="1" />
          </LinearGradientBrush>
     </ProgressBar.Foreground>
</ProgressBar>

こんな感じでOKです。

言語を指定してリソースファイルから文字列を取得する

iOSに設定された言語に対応したリソースから文字列を取得するのであれば
こんな感じで簡単ですね。
NSLocalizedString(@”res_key”, nil)

さて、これをiOSの言語設定によらず、プログラム内で指定した言語のリソースファイルから文字列を取得するにはどうすればよいか?
一般的にはこんな事は不要なんだと思いますが、私自身必要に迫られましたので、メモとして残しておきます。

下記の手順で取得できます。
・言語に対応したリソースをNSBundleの形で取得する
・NSBundleから localizedStringForKey を使って文字列を取得

//リソースファイルのフルパスを見ると"ja.lproj" のようにかかれていますので
//対応する言語の識別子を設定する
NSString* lang = @"ja";

//バンドルを取得
NSString *path = [[NSBundle mainBundle ] pathForResource:lang ofType:@"lproj" ];
NSBundle *bundle = [NSBundle bundleWithPath:path];

//文字列の取得
// この例では"res_key"として設定されている文字列を求めています
NSString *text = [bundle localizedStringForKey:@"res_key" 
                  value:@"undefined" table:nil];

こんなの需要ありますかね??