Я использую TiltEffect , предоставленный Microsoft. Я пытаюсь использовать его с TextBlocks , однако он не работает, даже если я добавлю тип TextBlock в список элементов Tiltable:
TiltEffect.TiltableItems.Add( typeof( System.Windows.Controls.TextBlock ) );
Однако, если я окружу TextBlock Border и переместу событие Tap к границе, оно будет работать правильно.
Есть ли какая-либо конкретная причина для такого поведения? Не слишком элегантно окружать все мои накладные текстовые блоки рамками.
ОБНОВЛЕНИЕ: То же самое относится к форме прямоугольника.
ОБНОВЛЕНИЕ 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, только Text, поэтому, если требуется TextWrapping, FontSize и т. Д., Его необходимо реализовать таким же образом.
Однако я не удовлетворен этим решением, поэтому все еще ищу более элегантный обходной путь.
ОБНОВЛЕНИЕ 3: описанный выше подход не идеален, я обнаружил, что он недетерминированно завершается с исключением «неверный параметр» (иногда он выдается после запуска приложения, иногда нет).