проблемыИспользование нескольких изображений для создания масштабируемой Control
мне нужно, чтобы сделать элементы управления, которые используются изображения в качестве фона, которые могут быть любой шириной без искажения изображения. Например, если я использовал одно изображение и растянул его, округленные углы изображения будут искажены.
Решение
Решение, данное Noxivs, было использовать пользовательский UserControl с тремя изображениями, с двух сторон и посередине, натянутой.
Важно добавить SnapsToDevicePixels = «True» в UserControl сетке, как без этого один разрыв пикселей появился между изображениями.
MainWindow.xaml
<Window x:Class="Testing.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ns="clr-namespace:Testing"
Title="MainWindow" Height="350" Width="525">
<Grid Name="MainGrid">
<ns:ScalableTextBox TextBoxText="Added in XAML" Width="120" Margin="0,0,0,100">
</ns:ScalableTextBox>
</Grid>
</Window>
MainWindow.xaml.cs
ScalableTextBox scalableTextBox = new ScalableTextBox();
scalableTextBox.TextBoxText = "Added in C#";
scalableTextBox.Width = 100;
MainGrid.Children.Add(scalableTextBox);
ScalableTextBox.xaml.cs
public partial class ScalableTextBox : UserControl
{
public ScalableTextBox()
{
InitializeComponent();
}
public string TextBoxText
{
get { return this.TextBoxName.Text; }
set { this.TextBoxName.Text = value; }
}
}
ScalableTextBox.xaml
<UserControl x:Class="Testing.ScalableTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="36" d:DesignWidth="50" Height="36" MinWidth="29">
<Grid>
<Grid SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="14" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="14" />
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="pack://siteoforigin:,,,/Images/left.png" />
<Image Grid.Column="1" Stretch="Fill" Source="pack://siteoforigin:,,,/Images/center.png"/>
<Image Grid.Column="2" Source="pack://siteoforigin:,,,/Images/right.png" />
</Grid>
<TextBox Name="TextBoxName" VerticalAlignment="Center"
HorizontalAlignment="Center" Background="{x:Null}"
BorderBrush="{x:Null}" FontSize="12"/>
</Grid>
</UserControl>
Еще раз спасибо Noxivs!
Вы хотите изображения, данные будут размещены как фон для управления текстовым полем? – Sangeetha
Да. Я создаю несколько элементов управления в своем коде C# с различной шириной и хочу, чтобы все они использовали эти два или что-то подобное, фоновые изображения независимо от их ширины. – Falesh
Это не простой способ. Я бы предпочел использовать геометрию «Путь», чтобы определить границу и фон и сделать растягивание «Путь», чтобы заполнить весь «TextBox». – kennyzx