C# 从CodeBehind访问列表框中画布的ScaleTransform

C# 从CodeBehind访问列表框中画布的ScaleTransform,c#,wpf,canvas,listbox,C#,Wpf,Canvas,Listbox,我的问题 我想将ScaleTransform添加到画布中,并尝试在视图的代码隐藏中为其添加代码。然而,当VisualStudio向我显示访问器时,当我试图在代码隐藏中使用它时,它会抛出一个错误 我的列表框如下所示: <Grid> <cc:ListBoxNoDragSelection ItemsSource="{Binding MainModel.Rectangles}" Background="{DynamicResource BG}" SelectedItem="{

我的问题

我想将ScaleTransform添加到画布中,并尝试在视图的代码隐藏中为其添加代码。然而,当VisualStudio向我显示访问器时,当我试图在代码隐藏中使用它时,它会抛出一个错误

我的列表框如下所示:

<Grid>
    <cc:ListBoxNoDragSelection ItemsSource="{Binding MainModel.Rectangles}" Background="{DynamicResource  BG}" SelectedItem="{Binding Selected}"
                               BorderThickness="0" x:Name="ListBoxNoDragSelection">
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <Canvas x:Name="MockupCanvas" MouseWheel="MockupCanvas_OnMouseWheel" Background="Transparent">
                    <Canvas.RenderTransform>
                        <ScaleTransform x:Name="St"/>
                    </Canvas.RenderTransform>
                    <Canvas.ContextMenu>
                        <ContextMenu>
                            <MenuItem Header="New rectangle" Command="{Binding AddNewRectangleToCollectionCommand}"/>
                            <MenuItem Header="Delete selected rectangle" Command="{Binding TryDeleteRectangleFromCollectionCommand}"/>
                        </ContextMenu>
                    </Canvas.ContextMenu>
                </Canvas>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
        <ListBox.ItemContainerStyle>
            <Style TargetType="ListBoxItem">
                <Setter Property="Canvas.Left" Value="{Binding X}"/>
                <Setter Property="Canvas.Top" Value="{Binding Y}"/>
                <Setter Property="Canvas.ZIndex" Value="{Binding Z}"/>
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel Height="Auto" Width="{Binding Width}">
                    <Label DockPanel.Dock="Top" Content="{Binding Name}" Foreground="{DynamicResource Foreground}" IsHitTestVisible="False"/>
                    <Rectangle Width="{Binding Width}" Height="{Binding Height}"  DockPanel.Dock="Bottom"
                               Fill="Transparent" Stroke="White" StrokeThickness="3" RadiusX="10" RadiusY="10" />
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </cc:ListBoxNoDragSelection>
</Grid>
Visual Studio一直告诉我,
St
不在当前上下文中可用


我做错了什么?

您只需从画布中取出
ScaleTransform
,而不是按名称访问它:

private void MockupCanvas_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
    var scaleTransformation = (sender as Canvas)?.RenderTransform as ScaleTransform;

    if (scaleTransformation == null)
        return;
    if (e.Delta > 0)
    {
        scaleTransformation.ScaleX *= ScaleRate;
        scaleTransformation.ScaleY *= ScaleRate;
    }
    else
    {
        scaleTransformation.ScaleX /= ScaleRate;
        scaleTransformation.ScaleY /= ScaleRate;
    }
}
private void MockupCanvas_OnMouseWheel(object sender, MouseWheelEventArgs e)
    {

        if (e.Delta > 0)
        {
            St.ScaleX *= ScaleRate;
            St.ScaleY *= ScaleRate;
        }
        else
        {
            St.ScaleX /= ScaleRate;
            St.ScaleY /= ScaleRate;
        }
    }
private void MockupCanvas_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
    var scaleTransformation = (sender as Canvas)?.RenderTransform as ScaleTransform;

    if (scaleTransformation == null)
        return;
    if (e.Delta > 0)
    {
        scaleTransformation.ScaleX *= ScaleRate;
        scaleTransformation.ScaleY *= ScaleRate;
    }
    else
    {
        scaleTransformation.ScaleX /= ScaleRate;
        scaleTransformation.ScaleY /= ScaleRate;
    }
}