2012-05-10 6 views
0

更新::TextBoxのスタイルをphone:PhoneApplicationPage.Resourcesタグに移動しました。まったく同じように動作します。 ResourceDictionary何が問題の原因ですが、スタイルを定義する方法に何か問題があります。ResourceDictionaryのスタイルは他のすべての機能を妨げています

私はちょうどResourceDictionariesで遊んで開始し、私は本当に彼らのように私は自分のアプリケーションでそれらを使用しようとしたとき、すべてが動作を停止。

まず、次のテキストボックス:

<TextBox Grid.Column="1" 
    Grid.Row="0" 
    x:Name="Value" 
    InputScope="Number" 
    TextAlignment="Right" 
    TextChanged="OnValueTextChanged"> 
    <TextBox.Style> 
     <StaticResource ResourceKey="InputTextBox" /> 
    </TextBox.Style> 
</TextBox> 

更新:私はXAMeLiの答えあたりのResourceDictionaryを更新したと今、私は国境を参照してくださいが、ときに私は、テキストボックスに任意のバックグラウンドを持っていないように見えるだろうが、それをクリックして、TextBoxがそこにいなくても何も起こりません。そして、純粋な運勢で私は、下の境界線をクリックすると、TextBoxが小さすぎるか、境界要素の下に隠れているかのように数値キーボードがポップアップすることに気付きました。 TextBoxの高さを無駄に修正しようとしました。これは私を夢中にさせている。

はその後ListPickersはさらに悪化している:

<toolkit:ListPicker 
    Grid.Column="0" 
    Grid.ColumnSpan="2" 
    Grid.Row="1" 
    x:Name="CategoriesPicker" 
    HeaderTemplate="{StaticResource ListPickerHeaderTemplate}" 
    FullModeItemTemplate="{StaticResource CategoriesPickerTemplate}" 
    ExpansionMode="FullScreenOnly" 
    BorderThickness="0" 
    Padding="0" 
    Margin="0" 
    SelectionChanged="OnCategoriesPickerSelectionChanged"> 
    <toolkit:ListPicker.Style> 
     <StaticResource ResourceKey="ListPickersStyle"/> 
    </toolkit:ListPicker.Style> 
</toolkit:ListPicker> 

スタイルがそれであるときも、私はそれを与えているデータをバインドしません。

のResourceDictionaryを持つファイルは、次のようになります

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"> 
    <Style x:Name="InputTextBox" TargetType="TextBox"> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="Margin" Value="-12"/> 
    <Setter Property="Height" Value="50"/> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <LinearGradientBrush StartPoint="0 0" EndPoint="0 1"> 
       <GradientStop Color="DarkGray" Offset="0"/> 
       <GradientStop Color="DarkGray" Offset=".3"/> 
       <GradientStop Color="LightSlateGray" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="TextBox"> 
        <Border 
          BorderThickness="2" 
          Margin="15" 
          CornerRadius="3"> 
         <Border.BorderBrush> 
          <LinearGradientBrush StartPoint="0 0" EndPoint="0 1"> 
           <GradientStop Offset="0" Color="DarkGray"></GradientStop> 
           <GradientStop Offset="0.3" Color="DarkGray"></GradientStop> 
           <GradientStop Offset="1" Color="LightSlateGray"></GradientStop> 
          </LinearGradientBrush> 
         </Border.BorderBrush> 
         <Border 
          BorderThickness="2" 
          CornerRadius="3"> 
          <Border.BorderBrush> 
           <LinearGradientBrush StartPoint="1 1" EndPoint="1 0"> 
            <GradientStop Offset="1" Color="Gray"></GradientStop> 
            <GradientStop Offset="0.3" Color="DarkGray"></GradientStop> 
            <GradientStop Offset="0" Color="DarkGray"></GradientStop> 
           </LinearGradientBrush> 
          </Border.BorderBrush> 

         </Border> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <Style x:Name="ListPickersStyle" TargetType="toolkit:ListPicker"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="toolkit:ListPicker"> 
        <Border 
         BorderThickness="2" 
         Padding="0" 
         Margin="10"       
         CornerRadius="3" 
         Background="DarkGray"> 
         <Border.BorderBrush> 
          <LinearGradientBrush StartPoint="0 0" EndPoint="0 1"> 
           <GradientStop Offset="0" Color="DarkGray"></GradientStop> 
           <GradientStop Offset="0.3" Color="DarkGray"></GradientStop> 
           <GradientStop Offset="1" Color="LightSlateGray"></GradientStop> 
          </LinearGradientBrush> 
         </Border.BorderBrush> 
         <Border BorderThickness="2" 
          CornerRadius="3"> 
          <Border.BorderBrush> 
           <LinearGradientBrush StartPoint="1 1" EndPoint="1 0"> 
            <GradientStop Offset="1" Color="Gray"></GradientStop> 
            <GradientStop Offset="0.3" Color="DarkGray"></GradientStop> 
            <GradientStop Offset="0" Color="DarkGray"></GradientStop> 
           </LinearGradientBrush> 
          </Border.BorderBrush> 
          <toolkit:ListPicker 
           BorderThickness="0" 
           Padding="0" 
           Margin="0"> 
           <toolkit:ListPicker.Background> 
            <LinearGradientBrush StartPoint="0 0" EndPoint="0 1"> 
             <GradientStop Offset="0" Color="DarkGray"></GradientStop> 
             <GradientStop Offset="0.5" Color="DarkGray"></GradientStop> 
             <GradientStop Offset="1" Color="LightSlateGray"></GradientStop> 
            </LinearGradientBrush> 
           </toolkit:ListPicker.Background> 
          </toolkit:ListPicker> 
         </Border> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</ResourceDictionary> 

は、誰かが私が間違っているのものを私に説明してください。

+0

Expression Blendを使用してTextBoxに使用されるテンプレートのコピーを作成すると、提供されたものよりもはるかに詳細が含まれています。 ListPickerのスタイルも削除しましたか? –

+0

@ PaulDiston:私はExpression Blendを使用しませんでした。私はもともと、Main.xamlページにXAMLを書き、美しく働いていました。私はリソースディクショナリについて読んで、いくつかのコントロールで同じスタイルを使っていたので、試してみました。 –

答えて

1

があなたのControlTemplateの内部統制それらの自己がある、テキストボックスのすなわちコントロールテンプレートはTextBoxを保持しています。これはコントロールテンプレートの使用方法ではありません。 BlendまたはVS11を使用して、各コントロールのデフォルトのスタイルを抽出します(新しいクリーンなソリューションで行うことをお勧めします)。

+0

ありがとう、これは正しい軌道にあるようです。私は今、別の問題があるので、辞書と質問を更新しました、TextBoxはそこにないようです。 –

0

あなたは、単に他のプロパティのような例をスタイルを参照することができるはずです。

<TextBox Style="{StaticResource InputTextBox}"/> 

そして、あなたがオーバーライドしたいすべての設定、例えば、その後、最初にあなたのスタイルを設定してみてください:

<TextBox Style="{StaticResource InputTextBox}" TextAlignment="Right" /> 
+0

はい、できますが、それは何も変わりません。アラインメントとInputScopeプロパティは何の効果もありません。 –

0

あなたはResourceDictionaryx:Key代わりのx:Name使用する必要があります。

X:キーとX:名前が同じ概念ではありません。 x:キーはリソース辞書内でのみ にのみ使用されます。 x:XAMLのすべての領域に名前が使用されます。 A キー値を使用したFindName呼び出しは、キー付きリソースを取得しません。キー アイテムに存在する:のNO xがあれば、リソースアイテムの 代替リソースキーとして、名前(または名前)属性: しかし、シルバー5は、xを使用することができます。

Windows PhoneがSilverlight 5から遠く離れたらすぐに、x:Nameを辞書で使用することはできません。

関連する問題