これは、私はWPFでこの問題を再現する方法である:TemplateBindingのは、特定のケースでは動作しません
は、カスタムコントロールを作成します。
public class TestCustomControl : Control
{
static TestCustomControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(TestCustomControl), new FrameworkPropertyMetadata(typeof(TestCustomControl)));
}
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
// Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register("Text", typeof(string), typeof(TestCustomControl), new PropertyMetadata("Hello"));
public double OffSet
{
get { return (double)GetValue(OffSetProperty); }
set { SetValue(OffSetProperty, value); }
}
// Using a DependencyProperty as the backing store for OffSet. This enables animation, styling, binding, etc...
public static readonly DependencyProperty OffSetProperty =
DependencyProperty.Register("OffSet", typeof(double), typeof(TestCustomControl), new PropertyMetadata(5.0));
}
は一般に、それのスタイルを追加します。 XAMLファイル:
<Style TargetType="local:TestCustomControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:TestCustomControl">
<Grid>
<TextBlock Text="{TemplateBinding Text}"></TextBlock>
<TextBlock Text="{TemplateBinding Text}">
<TextBlock.RenderTransform>
<TranslateTransform X="{TemplateBinding OffSet}" Y="{TemplateBinding OffSet}"/>
<!--<TranslateTransform X="10" Y="10"/>-->
</TextBlock.RenderTransform>
</TextBlock>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
そして、メインウィンドウに追加:
<local:TestCustomControl OffSet="32" Text="the off set is not working" FontSize="36">
</local:TestCustomControl>
アプリケーションを実行すると、「テキスト」が正しく動作することがわかりましたが、「OffSet」は機能しません。 Windows Phone 7開発環境でも同様のことを試みましたが、同じ結果が得られました。
OffSetを動作させるためにコードを変更する方法を教えてください。
おかげ
"WPF 4.5 Unleashed、" Nathan、Adam;第3版c。 2014年、p。 437、 'Freezeable'のプロパティで' TemplateBinding'を使うことはできません。 'TranslateTransform'は' Freezeable'なので、なぜ動作しませんでした( 'TextBlock'は' Freezeable'ではないので、そこで動作しました)。困惑しているのは、これが実行時(またはいつでも)のエラーではないということです。それはちょうど偶然に失敗します。 –