Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将设置绑定到一组单选按钮_C#_Wpf_Xaml - Fatal编程技术网

C# 将设置绑定到一组单选按钮

C# 将设置绑定到一组单选按钮,c#,wpf,xaml,C#,Wpf,Xaml,我这里有一种恼人的情景。 在我的WPF GUI中,我声明了一些单选按钮,我希望在GUI加载时检查正确的单选按钮 XAML: 但是CustomRadioButton IsChecked属性不会绑定到它,因为我需要创建DependencyProperty,我不知道如何对DependencyProperty执行相同的操作。请提供帮助。如果您想使用绑定进行此操作,请尝试此操作 xaml 如果您像我在这里看到的那样大量使用这种绑定,那么为了减少xaml代码,我们可以这样做,如下所示 xaml 转换器 单击

我这里有一种恼人的情景。 在我的WPF GUI中,我声明了一些单选按钮,我希望在GUI加载时检查正确的单选按钮

XAML:


但是CustomRadioButton IsChecked属性不会绑定到它,因为我需要创建DependencyProperty,我不知道如何对DependencyProperty执行相同的操作。请提供帮助。

如果您想使用绑定进行此操作,请尝试此操作

xaml

如果您像我在这里看到的那样大量使用这种绑定,那么为了减少xaml代码,我们可以这样做,如下所示

xaml

转换器


单击“我的说明”中的WPF GUI链接。所有内容都是链接的。很遗憾,我们不是来查看您的源代码的。如果您需要帮助,您需要在这里为我们提供一个更具体的示例。好的,补充了所有内容,现在应该更清楚了。很抱歉没有从一开始就这么做。我现在已经尝试了两种方法,但都不起作用。我不得不稍微修改RadioButtonBinding函数,因为我不能在XAML中将“HonkySettings.Default.TrayiConBehavior”作为参数写入。我删除了RadioButtonBinding构造函数上的参数,并将HonkySettings.Default.TrayIconBehavior设置直接添加到第一个新绑定()中。使用这种方式,在按下RadioButton时无法转换回内容值,因为ConvertBack函数中的值是布尔值。
<RadioButton Grid.Row="0" Grid.Column="0" Name="RadioButtonShowSettings" GroupName="OnTrayClick" Content="Show settings window" HorizontalAlignment="Left" VerticalAlignment="Center" />
<RadioButton Grid.Row="1" Grid.Column="0" Name="RadioButtonOpenFile" GroupName="OnTrayClick" Content="Open upload dialog" HorizontalAlignment="Left" VerticalAlignment="Center" />
<RadioButton Grid.Row="2" Grid.Column="0" Name="RadioButtonIndexFile" GroupName="OnTrayClick" Content="Open file indexer" HorizontalAlignment="Left" VerticalAlignment="Center" />
<RadioButton Grid.Row="0" Grid.Column="1" Name="RadioButtonImageGallery" GroupName="OnTrayClick" Content="Open image gallery" HorizontalAlignment="Left" VerticalAlignment="Center" />
<RadioButton Grid.Row="1" Grid.Column="1" Name="RadioButtonTakeScreenshot" GroupName="OnTrayClick" Content="Take a screenshot (3 seconds delay)" HorizontalAlignment="Left" VerticalAlignment="Center" />
private void LoadSettings()
{
    List<RadioButton> TrayIconBehaviourRadioButtons = GridTrayIconBehaviour.Children.OfType<RadioButton>().ToList();
    foreach (RadioButton rButton in TrayIconBehaviourRadioButtons)
    {
        if (rButton.Content.Equals(HonkySettings.Default.TrayIconBehaviour))
            rButton.IsChecked = true;
    }

    List<RadioButton> FullscreenCaptureRadioButtons = GridFullscreenCapture.Children.OfType<RadioButton>().ToList();
    foreach (RadioButton rButton in FullscreenCaptureRadioButtons)
    {
        if (rButton.Content.Equals(HonkySettings.Default.FullscreenCapture))
            rButton.IsChecked = true;
    }

    if (RadioButtonQualityPNG.Content.Equals(HonkySettings.Default.ScreenCaptureQuality))
        RadioButtonQualityPNG.IsChecked = true;
    else RadioButtonQualityJPG.IsChecked = true;
}
public Boolean IsChecked
{
    get
    {
        if (CustomRadioButton.Content.Equals(HonkySettings.Default.TrayIconBehaviour)) return true;
        else return false;
    }
    set
    {
        HonkySettings.Default.TrayIconBehaviour = CustomRadioButton.Content.ToString();
    }
}
<Window x:Class="Stackoverflow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Stackoverflow"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <local:SettingsConverter x:Key="settingsConverter"/>
</Window.Resources>
<StackPanel>
    <RadioButton   GroupName="OnTrayClick" Content="Show settings window">
        <RadioButton.IsChecked>
            <MultiBinding Converter="{StaticResource myNameConverter}">
                <Binding Path="HonkySettings.Default.TrayIconBehaviour"/>
                <Binding Path="Content" RelativeSource="{RelativeSource Mode=Self}"/>
            </MultiBinding>
        </RadioButton.IsChecked>
    </RadioButton>
    <RadioButton   GroupName="OnTrayClick" Content="Open upload dialog">
        <RadioButton.IsChecked>
            <MultiBinding Converter="{StaticResource myNameConverter}">
                <Binding Path="HonkySettings.Default.TrayIconBehaviour"/>
                <Binding Path="Content" RelativeSource="{RelativeSource Mode=Self}"/>
            </MultiBinding>
        </RadioButton.IsChecked>
    </RadioButton>
    <RadioButton   GroupName="OnTrayClick" Content="Open file indexer">
        <RadioButton.IsChecked>
            <MultiBinding Converter="{StaticResource myNameConverter}">
                <Binding Path="HonkySettings.Default.TrayIconBehaviour"/>
                <Binding Path="Content" RelativeSource="{RelativeSource Mode=Self}"/>
            </MultiBinding>
        </RadioButton.IsChecked>
    </RadioButton>
    <RadioButton   GroupName="OnTrayClick" Content="Open image gallery">
        <RadioButton.IsChecked>
            <MultiBinding Converter="{StaticResource myNameConverter}">
                <Binding Path="HonkySettings.Default.TrayIconBehaviour"/>
                <Binding Path="Content" RelativeSource="{RelativeSource Mode=Self}"/>
            </MultiBinding>
        </RadioButton.IsChecked>
    </RadioButton>
    <RadioButton   GroupName="OnTrayClick" Content="Take a screenshot (3 seconds delay)">
        <RadioButton.IsChecked>
            <MultiBinding Converter="{StaticResource myNameConverter}">
                <Binding Path="HonkySettings.Default.TrayIconBehaviour"/>
                <Binding Path="Content" RelativeSource="{RelativeSource Mode=Self}"/>
            </MultiBinding>
        </RadioButton.IsChecked>
    </RadioButton>
</StackPanel>
    public class SettingsConverter:IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values != null && values.Count() == 2)
            return values.First() == values.Last();
        return false;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}    
<Window x:Class="Stackoverflow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Stackoverflow"
    Title="MainWindow" Height="350" Width="525">
<StackPanel>
    <RadioButton   GroupName="OnTrayClick" Content="Show settings window" IsChecked="{local:RadioButtonBinding HonkySettings.Default.TrayIconBehaviour}"/>
    <RadioButton   GroupName="OnTrayClick" Content="Open upload dialog" IsChecked="{local:RadioButtonBinding HonkySettings.Default.TrayIconBehaviour}"/>
    <RadioButton   GroupName="OnTrayClick" Content="Open file indexer"  IsChecked="{local:RadioButtonBinding HonkySettings.Default.TrayIconBehaviour}"/>
    <RadioButton   GroupName="OnTrayClick" Content="Open image gallery"  IsChecked="{local:RadioButtonBinding HonkySettings.Default.TrayIconBehaviour}"/>
    <RadioButton   GroupName="OnTrayClick" Content="Take a screenshot (3 seconds delay)" IsChecked="{local:RadioButtonBinding HonkySettings.Default.TrayIconBehaviour}"/>
</StackPanel>
    public class RadioButtonBinding : MultiBinding
{
    public RadioButtonBinding(string propName)
    { 
        Bindings.Add(new Binding(propName));
        Bindings.Add(new Binding("Content") { RelativeSource = new RelativeSource(RelativeSourceMode.Self) });
        Converter = new SettingsConverter();
    }
}
    public class SettingsConverter:IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values != null && values.Count() == 2)
            return values.First() == values.Last();
        return false;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}