Изменение размера тушь влево и вверх - PullRequest
1 голос
/ 19 января 2011

Я хочу изменить ширину и высоту тушь, чтобы соответствовать экрану. Когда я изменил его размер, ширина увеличивается вправо, а высота увеличивается вниз. Но чернильница не подходит для экрана.

Я также хочу исправить положение дочернего элемента inkcanvas. Если я смогу изменить размер inkcanvas, чтобы он соответствовал экрану, положение дочернего элемента inkcanvas не изменится.

Как изменить размер чернильной рамки слева и сверху, чтобы она соответствовала экрану?

alt text

<Canvas x:Name="Screen" >

                <InkCanvas Name="inkcanvas" ResizeEnabled="True"
                          Width="{Binding ElementName=LayoutRoot, Path=ActualWidth}"
                        Height="{Binding ElementName=LayoutRoot, Path=ActualHeight}"
                           EditingMode="Select" ClipToBounds="False"
                    Background="Bisque"
                    SelectionChanging="OnSelectionChanging" 
                    Visibility="Collapsed" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">

                    <!-- InkCanvas' Child Elements -->
                </InkCanvas>
                <Canvas.RenderTransform>
                    <MatrixTransform/>
                </Canvas.RenderTransform>
            </Canvas>

Спасибо

Обновление: Я положил чернильницу в сетку. Он помещается на экране, но положение дочернего элемента изменено.

Я хочу исправить положение красного прямоугольника. alt text

Положение красного прямоугольника не должно изменяться. alt text

<Grid>
        <InkCanvas x:Name="inkcanvas"  Background="Transparent">
            <Rectangle Height="41" HorizontalAlignment="Left"  Name="rectangle1" Stroke="Black" VerticalAlignment="Top" Width="69" Fill="#FFDB1111" />
        </InkCanvas>
        </Grid>

Моя большая картина:

В моем приложении WPF много картинок. Я могу увеличить / уменьшить холст. Я могу выбрать фотографии с помощью инструмента выбора.

У меня есть холст и тушь.

  • холст: содержать изображение и увеличивать / уменьшать

  • inkcanvas: есть инструмент выбора

Если я уменьшу масштаб, холст и тушь уменьшатся.

Если я использую инструмент выделения, я копирую все рисунки с холста в чернильное изображение.

Но чернила могут быть уменьшены, я не могу использовать инструмент выделения, если за пределами границы чернил.

Это причина, по которой я хочу изменить размер чернильницы и исправить положение детей.

Ответы [ 3 ]

0 голосов
/ 19 января 2011

Это зависит от контейнера вокруг InkCanvas. Кроме того, вы не можете ожидать, что дочерние элементы не будут двигаться, если вы возитесь с их контейнером. Если вам нужно, чтобы дочерние элементы вели себя независимо от InkCanvas, вы можете переосмыслить, если это хорошая идея, и если то, чего вы хотите достичь, не может быть сделано более эффективно с помощью другой настройки.

Вы должны рассказать нам больше о том, что представляет собой общая картина того, чего вы хотите достичь, того факта, что дети подвержены манипуляциям с их контейнером, как ожидается, и, как правило, желаемы. Может быть, есть лучший подход, чем пытаться масштабировать контейнер и в то же время сдвигать всех детей, чтобы свести на нет такие манипуляции.

0 голосов
/ 06 июля 2018
<Window x:Class="WpfInkCavasSaveImage.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow"  Height="1091" Width="873" WindowState="Maximized">

<Grid Margin="0,0,0,10" >
    <Grid.RowDefinitions>
        <RowDefinition Height="1200*" />
        <RowDefinition Height="50" />
    </Grid.RowDefinitions>
    <InkCanvas HorizontalAlignment="Stretch" Margin="1,1,1,10" x:Name="inkCanvas1" VerticalAlignment="Stretch" Width="Auto" RenderTransformOrigin="0.5,0.5" Background="LightGreen" SnapsToDevicePixels="True" IsManipulationEnabled ="True"  Grid.RowSpan="2">
        <InkCanvas.CacheMode>
            <BitmapCache/>
        </InkCanvas.CacheMode>
        <InkCanvas.DefaultDrawingAttributes>
            <DrawingAttributes Color="Black" FitToCurve="True" Height="2.0031496062992127" IgnorePressure="False" IsHighlighter="False" StylusTip="Ellipse" StylusTipTransform="Identity" Width="2.0031496062992127"/>

        </InkCanvas.DefaultDrawingAttributes>
    </InkCanvas>
</Grid>
</Window>


public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        inkCanvas1.Width = System.Windows.SystemParameters.WorkArea.Width;
        inkCanvas1.Height = System.Windows.SystemParameters.WorkArea.Height;
    }
}
0 голосов
/ 19 января 2011

Удалите все поля из чернильного холста и поместите его в сетку.

Не могли бы вы объяснить, почему это не будет работать для вас?

<Grid>
    <InkCanvas>
    ...
    </InkCanvas>
</Grid>

Редактировать Есть два способа сохранить дочерний элемент там, где он находится:

  1. Как только изменяется положение или размер InkCanvas, соответствующим образом корректируйте дочерние позиции.это означает, что вам нужно выбрать фиксированную позицию (окно topleft, screen topleft, ...), которое определяет фактическую позицию дочернего элемента.
  2. Удалите дочерний элемент из InkCanvas и поместите его в правильный контейнертот, который определяет положение ребенка.

Я бы предпочел # 2, так как он более логичен и требует меньше вычислений / обработки событий

...