2012-02-17 44 views
4

我正在使用Microsoft提供的TiltEffect util。我試圖用的TextBlocks,但是,這是行不通的使用它,即使我將TextBlock類型添加到可傾斜的項目清單:TextBlock上的TiltEffect

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

但是,如果我周圍有(邊)境的TextBlock,並將Tap事件移動到邊框,它可以正常工作。

這種行爲是否有任何特定的原因?將所有可裁切的TextBlocks與邊框包圍起來並不太優雅。

更新:同樣適用於矩形形狀。

UPDATE2:我現在的解決方案是一個解決辦法,我定義的自定義控制:

<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 2013-02-02 17:10:48

回答

6

我對Silverlight工具包的傾斜效果感到不滿意,尤其是它「很大程度上」應用於基於類型的元素的方式。所以我寫了一個選擇。您還可以配置要應用多少「傾斜」。該源代碼可以在這裏找到:

Metro in Motion Part #4: Tilt Effect

您可以然後單獨應用平鋪內容如下:

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

凡整數指定多少傾斜申請。我會推薦使用相當低的值,本機效果非常微妙,但是人們往往會在自己的silerlight應用程序中使其過於極端,Metro效果應該是微妙的,他們不應該對你大喊!

+0

非常好的編碼,我從閱讀中學到代碼庫,我在你的個人資料中看到你與股票市場有關,如果你想免費獲得我們(現在連續兩次)的副本,請發郵件給benji(at)tipranks(dot)com。Finovate winning軟件作爲我的感激之情的一個小表示。再次感謝。 – 2013-09-12 16:15:09

5

萬一別人遇到這種情況,我有另一種解決方案。

只需將ListBoxItem標籤附加到TextBlock元素即可。

例如

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

如果你想TiltEfect這可能意味着你正在使用它作爲一個按鈕,所以你只要使用你restyle只顯示文本的按鈕或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"/>