ورود

View Full Version : سوال: استفاده از Polygon در یک user control



smt1383
سه شنبه 16 آذر 1389, 08:52 صبح
با سلام
من با استفاده از کلاس Polygon یک شکل خاصی را داخل یک user control رسم کرده ام. حال می خواهم بدانم چکار باید کرد که با تغییر سایز user control، سایز این چند ضلعی نیز به همان نسبت تغییر کند؟

reza105
سه شنبه 16 آذر 1389, 09:45 صبح
بزارش توي يه ViewBox درست ميشه



<UserControl x:Class="TestWPF.Poly"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>

<Viewbox Margin="12,12,21,77" Stretch="Fill" Name="viewbox1">
<Polygon Grid.Row="0" Grid.Column="0" Grid.RowSpan="4"
Fill="Yellow" Stroke="Black" StrokeThickness="4"
StrokeLineJoin="Miter" Width="100" Height="100"
Stretch="Fill"
Points="8,4 10,7 18,7 12,10 15,17 10,13 4,16 7,10 2,8 7,7"
Name="star"/>
</Viewbox>
</UserControl>

مهدی فرزاد
سه شنبه 16 آذر 1389, 11:59 صبح
سلام
نیازی به استفاده از ViewBox ندارید
فقط باید به این نکات توجه کنید
1- طول و عرض Polygon باید auto باشه
2- برای Polygon خاصیت Stretch=Fill
3- معمولا در هنگام ساخت یوزر کنترل یک کنترل grid درون آن قرار دارد در آن کنترل هم باید همین تنظیمات اعمال گردد
(کلا برای کنترل هایی که درون یک کنترل دیگر قرار میگیرن و قصد دارید اونها رو با هم بزرگ یا کوچک کنید این تنظیمات صورت میگیرد)
من مثال دوستمون رو براتون به این شکل اصلاح کردم


<Grid x:Name="LayoutRoot">
<Polygon Grid.Row="0" Grid.Column="0"
Fill="Yellow" Stroke="Black" StrokeThickness="4"
StrokeLineJoin="Miter"
Stretch="Fill"
Points="8,4 10,7 18,7 12,10 15,17 10,13 4,16 7,10 2,8 7,7"
x:Name="star" Margin="1"/>
</Grid>


به تنظیمات گرید دقت کنید

این لینک رو حتما ببینید من در اونجا مفصل توضیح دادم
http://barnamenevis.org/showthread.php?257289-dock-كردن-يك-تصويريا-كنترل

reza105
سه شنبه 16 آذر 1389, 12:40 عصر
من اشكالي در ViewBox نديدم

ضمناً كد شما رو امتحان كردم درست جواب نداد.

اين كد هم بدون Viewbox و grid يا هر container ديگه اي



<UserControl x:Class="TestWPF.Poly"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>

<Polygon
Fill="Yellow" Stroke="Black" StrokeThickness="1"
StrokeLineJoin="Miter" MinWidth="20" MinHeight="20"
Stretch="Fill"
Points="8,4 10,7 18,7 12,10 15,17 10,13 4,16 7,10 2,8 7,7"
Name="star"/>

</UserControl>

مهدی فرزاد
سه شنبه 16 آذر 1389, 13:49 عصر
من اشكالي در ViewBox نديدم

ضمناً كد شما رو امتحان كردم درست جواب نداد.

اول سلام
دوم من جایی نگفتم ViewBox اشکال داره!! گفتم نیازی به استفاده از اون نیست و توضیح شما رو تکمیل کردم
سوم کد من اشکال نداشت کامل کپی نشده بود اصلاحش کردم و فقط قسمت گرید رو گذاشتم

smt1383
چهارشنبه 17 آذر 1389, 08:51 صبح
با تشکر از دوستان. هر دو راهی که دوستان راهنمایی کردند جواب داد. می خواستم بدانم اگر بخواهیم همین کار را با یک text انجام دهیم چکار باید بکنیم؟ یعنی User Control ما یک متن داشته باشد که با تغییر سایز کنترل، سایز متن هم به همان نسبت تغییر کند.

مهدی فرزاد
چهارشنبه 17 آذر 1389, 14:21 عصر
سلام



اول باید در کد Xaml اون TextBlok این تنظیمات رو انجام بدی


RenderTransformOrigin="0.5,0.5"
و هم چنین درون تگ TextBlock بنویس

<TextBlock.RenderTransform>
<ScaleTransform x:Name="t"/>
</TextBlock.RenderTransform>

در کل باید کد Xaml مربوط به textBlock این شده باشه

<TextBlock Name="textBlock" TextWrapping="Wrap" Text="1" VerticalAlignment="Center" HorizontalAlignment="Center" RenderTransformOrigin="0.5,0.5">
<TextBlock.RenderTransform>
<ScaleTransform x:Name="t"/>
</TextBlock.RenderTransform>
</TextBlock>
حالا در رویداد SizeChanged یوزر کنترلت بنویس

t.ScaleY = this.ActualHeight / this.textBlock.ActualHeight;
t.ScaleX = this.ActualWidth / this.textBlock.ActualWidth;
:چشمک:
اینم فایل ضمیمه
البته من این کار رو بجا یوزر کنترل تو خود ویندوز کردم هیچ فرقی نداره
فایل رو اجرا کن و نتیجه رو ببین
اگه Vs2010 نداری فایل exe درون پوشه bin رو اجرا کن و نتیجه رو ببین و با Notepad فایل های xaml و xaml.cs رو باز کن و کد هارو ببین