ADi
ADi

Reputation: 219

Prevent resize of control in grid WPF C#

(Edit) i have an image in tabItem1. when i resize window(dragging by corner or maximize button) the image also resize and occupy whole grid. i added width and height on image and the resisng stopped default to actual image width & height in pixels.

Do i have to apply width and height to prevent resising of control whom i don't want to resize on window scale? or is there any property for controls to prevent resizing.

Basically, i'll have some pics which i don't want to be resided, and there will be some text which i want to be resided.

XAML:

<Window x:Class="Engine.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Width="600" Height="600">
    <Grid>
        <TabControl Grid.RowSpan="2">
            <TabItem Header="TabItem1">
                <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                    <Grid x:Name="TGrid1" Background="#FFE5E5E5"/>
                </ScrollViewer>
            </TabItem>
            <TabItem Header="TabItem2">
                <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
                    <Grid x:Name="TGrid2" Background="#FFE5E5E5">
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                    </Grid>
                </ScrollViewer>
            </TabItem>
        </TabControl>
    </Grid>
</Window>

Code:

public MainWindow()
{
        InitializeComponent();

        var bitmapFrame = BitmapFrame.Create(new Uri(@"" + AppDomain.CurrentDomain.BaseDirectory + "Chrysanthemum.jpg"), BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
        var dragDropImage = new Image
        {
            Source = bitmapFrame, //new BitmapImage(new Uri(@"" + AppDomain.CurrentDomain.BaseDirectory + "Chrysanthemum.jpg")),
            Name = "dragDropImage",
            Width = bitmapFrame.PixelWidth,
            Height = bitmapFrame.PixelHeight
        };
        TGrid1.Children.Add(dragDropImage);

        var rect = new Rectangle
        {
            Stroke = new SolidColorBrush(Colors.Red),
            Fill = new SolidColorBrush(Colors.Black),
            Width = 474,
            Height = 405
        };
        Grid.SetRow(rect, 0);
        TGrid2.Children.Add(rect);
  }

Upvotes: 0

Views: 4976

Answers (1)

JYL
JYL

Reputation: 8319

If you set the properties VerticalAlignment (for example to Top) and HorizontalAlignment (for example to Left) of your components image and rect, these controls will be sized according to the content need, instead of the available space in the container.

Is that what you want ?

EDIT : For your image, you should set its property Stretch="None". See here.

EDIT 2 :

var dragDropImage = new Image
        {
            Source = bitmapFrame, //new BitmapImage(new Uri(@"" + AppDomain.CurrentDomain.BaseDirectory + "Chrysanthemum.jpg")),
            Name = "dragDropImage",
            VerticalAlignment = System.Windows.VerticalAlignment.Top,
            HorizontalAlignment = System.Windows.HorizontalAlignment.Right,
            Stretch = System.Windows.Media.Stretch.None
        };

Upvotes: 4

Related Questions