2012-02-17 8 views
4

私はTiltEffectをマイクロソフトが提供しています。私は傾動可能項目のリストにTextBlockのタイプを追加した場合でも、しかし、それは動作しません、のTextBlockでそれを使用しようとしています:TextBlockのTiltEffect

TiltEffect.TiltableItems.Add(typeof(System.Windows.Controls.TextBlock)); 

しかし、私はボーダーでのTextBlockを囲む場合を入力し、TapイベントをBorderに移動すると、正しく動作します。

この現象には具体的な理由はありますか?タップ可能なすべてのTextBlockをBordersで囲むことはあまりにもエレガントではありません。

更新:Rectangleシェイプについても同様です。

アップデート2:

<UserControl x:Class="MyApp.Controls.TiltableTextBlock" 
    Name="tiltableTextBlock" 
    ...> 
    <Button Margin="0" Padding="0"> 
     <Button.Template> 
      <ControlTemplate> 
       <TextBlock Margin="0" Padding="0" 
        Text="{Binding Text, ElementName=tiltableTextBlock}" 
        Style="{Binding Style, ElementName=tiltableTextBlock}" /> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 
</UserControl> 

そして、背後にあるコードで:

public partial class TiltableTextBlock : UserControl 
{ 
    public TiltableTextBlock() 
    { 
     InitializeComponent(); 
    } 

    public string Text 
    { 
     get { return (string)GetValue(TextProperty); } 
     set { SetValue(TextProperty, value); } 
    } 

    public static readonly DependencyProperty TextProperty = 
     DependencyProperty.Register("Text", typeof(string), typeof(TiltableTextBlock), new PropertyMetadata(String.Empty)); 

    //NOTE: hiding the Style property of the base class, so the Style does not get applied to the UserControl, rather to the TextBlock. 
    public new Style Style 
    { 
     get { return (Style)GetValue(StyleProperty); } 
     set { SetValue(StyleProperty, value); } 
    } 

    public new static readonly DependencyProperty StyleProperty = 
     DependencyProperty.Register("Style", typeof(Style), typeof(TiltableTextBlock), new PropertyMetadata(new Style(typeof(TextBlock)))); 
} 

は、私は現在、他のTextBlock固有のプロパティを使用していない私の現在のソリューションは、回避策は、私はカスタムコントロールを定義していますテキストだけなので、TextWrapping、FontSizeなどが必要な場合は、同じ方法で実装する必要があります。

しかし、私はこの解決策に満足していないので、まだより洗練された回避策を探しています。

UPDATE3:上記のアプローチは完璧ではありません。「パラメータが間違っています」という例外が発生して非定常的にクラッシュすることがわかりました。例外(アプリケーションを起動した後にスローされることもあります。

+0

私はこれは私はちょうど私の投稿の問題に関連していると思いますが。あなたの背景を透明にしようとしましたか? http://stackoverflow.com/questions/14664251/why-cant-i-tap-click-blank-areas-inside-of-a-border-contentcontrol-without-sett – kamranicus

答えて

6

Silverlightのツールキットの傾きの効果、特にタイプに基づいた要素に「マジック的に」適用される方法に満足できませんでした。だから私は代わりを書いた。適用したい「傾き」の量を設定することもできます。ソースコードはここで見つけることができます:次のように

Metro in Motion Part #4: Tilt Effect

その後、個別の要素にタイルを適用することができます。

<TextBlock local:MetroInMotion.Tilt="6"/> 

整数を適用するどのくらいの傾きを指定します。かなり低い値を使用することをお勧めします。ネイティブエフェクトは非常に微妙ですが、人々は自分のシアーライトアプリケーションで極端すぎる傾向があります。メトロエフェクトは微妙なものでなければなりません。

+0

非常にきれいにコード化されている、私は読んだことから学んだコードベース、私はあなたのプロフィールであなたが株式市場に関連していることを知った、私たちの(今は2回続けて)の無料コピーをしたい場合は、ベンジ(at)tipranks(ドット)ソフトウェアは私の感謝の小さなトークンとして。再度、感謝します。 –

5

他の誰かがこの問題に遭遇する場合は、別の解決策があります。

TextBlock要素をListBoxItemタグで囲みます。

<ListBoxItem> 
    <TextBlock> 
     A Tilting Textblock 
    </TextBlock> 
</ListBoxItem> 
0

あなたがTiltEfectをしたい場合は、あなただけのあなただけのテキストを表示するためにスタイルを変更ボタンまたはHyperlinkBut​​tonを使用する必要がありますので、おそらくあなたがボタンとしてそれを使用していることを意味します。このように、Commandのようなボタンの追加のプロパティを利用することができます。 ここでハイパーリンクボタンスタイルの一例である:

<Style x:Key="NoUnderlineHyperlinkButtonStyle" TargetType="HyperlinkButton"> 
     <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMedium}"/> 
     <Setter Property="HorizontalAlignment" Value="Left"/> 
     <Setter Property="VerticalAlignment" Value="Top"/> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="HyperlinkButton"> 
        <Border Background="Transparent"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="MouseOver"/> 
           <VisualState x:Name="Pressed"> 
            <!--<Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="TextElement"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneAccentBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard>--> 
           </VisualState> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="TextElement"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Border Background="{TemplateBinding Background}" Margin="{StaticResource PhoneHorizontalMargin}" Padding="{TemplateBinding Padding}"> 
          <TextBlock x:Name="TextElement" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Text="{TemplateBinding Content}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
         </Border> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

あなたが使用することができます。

<HyperlinkButton Style="{StaticResource NoUnderlineHyperlinkButtonStyle}" Content="My Text" Tap="UIElement_OnTap"/>