ورود

View Full Version : استفاده از کنترل سفارشی به جای BulletChrome پیش فرض RadioButton



PetekDincos
جمعه 10 آذر 1391, 11:12 صبح
با سلام
من در Template کنترل RadioButton به جای کنترل پیش فرض (BulletChrome) یه کنترل سفارشی قرار دادم که این کنترل سفارشی دارای یه پراپرتی به نام IsChecked می باشه که من این پراپرتی رو به صورت زیر بایند می کنم


IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked, Mode=TwoWay}"

که Mode رو به صورت TwoWay قرار دادم و در RadioButton وقتی پراپرتی IsChecked برابر true هست نبایستی با کلیک روی آن بشه false کرد اما چون من از یه کنترل سفارشی استفاده کردم و این خاصیت رو داره که با کلیک کردن روی آن بشه true یا false کردن می خواستم بدونم راهی داره که این مشکل ما حل بشه چون چیزی به ذهنم نرسید . با تشکر

مهدی فرزاد
شنبه 11 آذر 1391, 08:10 صبح
سلام
چه نیازی به این کار بوده که یک کنترل سفارشی بجای BulletChrome قرار بدید؟
اون رو پاک کنید و با کنترل Elipse یک داره یا بیضی بجاش بگذارید ( البته چند تا باید بگذارید یکی برای حالت موس آور یکی برای چک خوردن )
نیازی نیست چیزی رو بایند کنید
در قسمت States زمانی که Checked میشه یکی از اون دایره ها نمایان میشه و زمانی که MouseOver هست یکی دیگه نمایان میشه
به این شکل عمل کنید

Amir Oveisi
شنبه 11 آذر 1391, 08:33 صبح
کدهای XAML مربوط به Template ای که ساختید رو قرار بدید اینجا.

PetekDincos
شنبه 11 آذر 1391, 09:55 صبح
با سلام


چه نیازی به این کار بوده که یک کنترل سفارشی بجای BulletChrome قرار بدید؟

از ToggleSwitch استفاده کردم


کدهای XAML مربوط به Template ای که ساختید رو قرار بدید اینجا.



<ControlTemplate TargetType="{x:Type RadioButton}">
<Grid Height="Auto" Width="Auto" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<MyToggleControl:ToggleSwitch Style="{DynamicResource RadioButtonToggleSwitch}" IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked, Mode=TwoWay}" IsEnabled="{Binding RelativeSource={RelativeSource TemplatedParent},Path=IsEnabled,Mode=TwoWay}" />
<ContentPresenter RecognizesAccessKey="True" HorizontalAlignment="Left" Margin="5,0,0,0" d:LayoutOverrides="Height" Grid.Column="1" VerticalAlignment="Center"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="HasContent" Value="true">
<Setter Property="FocusVisualStyle">
<Setter.Value>
<Style>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="14,0,0,0" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>


با تشکر

مهدی فرزاد
شنبه 11 آذر 1391, 13:26 عصر
از ToggleSwitch استفاده کردم

نیازی نیست کنترل بخصوصی بگذارید و چیزی رو Bind کنید همون کاری که گفتن انجام بدید مشکل حل میشه