【问题标题】:WPF custom control - reach element inside, rotate only part of custom controlWPF自定义控件 - 到达内部元素,仅旋转自定义控件的一部分
【发布时间】:2013-05-10 02:19:53
【问题描述】:

我对自定义控件有疑问。 我有一个自定义控件,其中有 5-8 个路径,用户可以“选择”什么。在这些路径中,我希望有标签(在自定义控件内),我可以在其中更改内容(从窗口,我使用该自定义控件)。 我的自定义控件的 XAML 如下所示:

<FirstMolarTooth ..........>
<DockPanel>
    <Label Name="lbl_tooth" DockPanel.Dock="Top" FontSize="10" HorizontalAlignment="Center" />
    <Grid DockPanel.Dock="Bottom" HorizontalAlignment="Center">
        <Path ......./>
    </Grid>
</DockPanel>
</FirstMolarTooth>

如何从使用该自定义控件的窗口中到达该标签? 类似:

<local:FirstMolarTooth x:Name="Tooth_15" ........>
<lbl_tooth Content="15" />
</local:FirstMolarTooth>

或

<local:FirstMolarTooth .... Content="15">
</local:FirstMolarTooth>

第二个问题是我在使用它的窗口中旋转自定义控件:

<local:FirstMolarTooth ....>
    <local:FirstMolarTooth.LayoutTransform>
        <RotateTransform CenterX="0.5" CenterY="0.5" Angle="180"/>
    </local:FirstMolarTooth.LayoutTransform>
</local:FirstMolarTooth>

我的问题是,当我这样做时(逻辑上),这会旋转整个控件(带有标签)。我只想旋转路径而不是标签。我认为我可以为该标签“isRotated”执行类似自定义属性的操作,当它设置为 true 时,我应该使用触发器“重置”旋转(设置角度 0)。但我无法做到这一点。 (我应该从 XAML 访问该自定义属性吗?还是仅在代码中?这可能是我尝试从 XAML 访问它的问题)。

我知道我可以从自定义控件中删除标签并在其中仅包含路径,然后仅旋转路径和标签在窗口中。但是用户可以选择“整个”自定义控件(选择牙齿),他可以选择牙齿的“段”(路径)。因此,我希望将所有内容都包含在该自定义控件中。

感谢您的建议。

【问题讨论】:

    标签: c# wpf custom-controls rotatetransform


    【解决方案1】:

    对于您的第一个问题,只需将 lbl_tooth 与 FirstMolarTooth Content 属性绑定即可。如果这不起作用,请在 FirstMolarTooth(of string) 中创建新的依赖属性并绑定它。然后,您可以稍后在监管控制之外更改该属性。

       <FirstMolarTooth x:Name="MOLAR" ..........>
        <DockPanel>
            <Label Name="lbl_tooth" DockPanel.Dock="Top" FontSize="10"                       HorizontalAlignment="Center" 
               Content="{Binding Content, ElementName=MOLAR}" />
            <Grid DockPanel.Dock="Bottom" HorizontalAlignment="Center">
                <Path ......./>
            </Grid>
        </DockPanel>
    

    对于第二个问题,只需创建可以在外部设置的 DOUBULE 类型的新依赖属性。要创建依赖属性,您可以 google 或搜索此论坛。数以百万计的答案。

       <FirstMolarTooth x:Name="MOLAR" ..........>
        <DockPanel>
            <Label Name="lbl_tooth" DockPanel.Dock="Top"   FontSize="10"                       HorizontalAlignment="Center" 
                Content="{Binding Content, ElementName=MOLAR}" />
            <Grid DockPanel.Dock="Bottom" HorizontalAlignment="Center">
                <Path .......>
                  <Path.LayoutTransform>
                      <RotateTransform CenterX="0.5" CenterY="0.5" 
                         Angle="{Binding YourNewAngleProperty, ElementName=MOLAR}"/>
                  </Path.LayoutTransform>
                </Path>
            </Grid>
        </DockPanel>
    

    【讨论】:

    • 是的,我的问题是 YourNewAngleProperty 在 XAML 代码中是未知的。第一个问题解决了(这是主要问题)。标记为答案。谢谢
    猜你喜欢
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 2015-06-03
    • 2015-09-07
    • 2014-08-08
    相关资源
    最近更新 更多