0

我为一个复选框制作了一个自定义图像,并希望它在每次单击图像时在选中版本和未选中版本之间切换。我的源代码:

XAML

<CheckBox Name="checkBox1" Padding="0" BorderThickness="0" Margin="5" Grid.Row="1">
    <Image Name="image1" Margin="-14,0,0,0" Source="checkbox0.png" MouseDown="Image_MouseDown" Stretch="Uniform"/>
</CheckBox>

C#

private void Image_MouseDown(object sender, MouseButtonEventArgs e)
{
     if (e.LeftButton == MouseButtonState.Pressed)
     {
         if (checkBox1checked)
         {
             image1.BeginInit();
             image1.Source = new BitmapImage(new Uri("/checkbox0.png", UriKind.RelativeOrAbsolute));
             image1.EndInit();
             checkBox1checked = false;
         }

         if (!checkBox1checked)
         {
             image1.BeginInit();
             image1.Source = new BitmapImage(new Uri("/checkbox1.png", UriKind.RelativeOrAbsolute));
             image1.EndInit();
             checkBox1checked = true;
         }
     }
}
4

3 回答 3

3

使用复选框的 Uncheck 和 Check 事件,并在其中设置图像源

<CheckBox Name="checkBox1" Padding="0" Unchecked="chkbox_Unchecked" Checked="chkbox_Checked BorderThickness="0" Margin="5" Grid.Row="1">
   <Image Name="image1" Margin="-14,0,0,0" Source="checkbox0.png" Stretch="Uniform"/>
</CheckBox>




        private void chkbox_Checked(object sender, RoutedEventArgs e)
        {
            SetImage("/checkbox0.png");
        }

        private void chkbox_Checked(object sender, RoutedEventArgs e)
        {
             SetImage("/checkbox1.png");
        }

    private void SetImage(string path)
    {
        image1.BeginInit();
                image1.Source = new BitmapImage(new Uri(path, UriKind.RelativeOrAbsolute));
                image1.EndInit();

    }
于 2012-06-28T12:30:30.090 回答
1

因为后面的代码中存在逻辑错误,所以第二个 if 语句将在第一个 if 之后执行,因为您更改了 checkbox 的值。

您还在复选框内定义了图像,每次初始化图像时都会以某种方式重置复选框的值,考虑将图像移到复选框之外或仅使用公共标志

<CheckBox Name="checkBox1" Padding="0" BorderThickness="0" Margin="5" Grid.Row="1">
</CheckBox>
<Image Name="image1" Margin="-14,0,0,0" Source="checkbox0.png" MouseDown="Image_MouseDown" Stretch="Uniform"/>

改变你的代码

private void Image_MouseDown(object sender, MouseButtonEventArgs e)
    {
        if (e.LeftButton == MouseButtonState.Pressed)
        {
            if (checkBox1checked)
            {
                image1.BeginInit();
                image1.Source = new BitmapImage(new Uri("/checkbox0.png", UriKind.RelativeOrAbsolute));
                image1.EndInit();
                checkBox1checked = false;
            }
            else
            {
                image1.BeginInit();
                image1.Source = new BitmapImage(new Uri("/checkbox1.png", UriKind.RelativeOrAbsolute));
                image1.EndInit();
                checkBox1checked = true;
            }
        }
    }
于 2012-06-28T12:39:25.920 回答
0

更好的尝试:

    private void chkbox_Unchecked(object sender, RoutedEventArgs e)
    {
         SetImage("/checkbox1.png");
    }

        private void chkbox_Checked(object sender, RoutedEventArgs e)
    {
         SetImage("/checkbox1.png");
    }
于 2015-06-04T11:07:32.247 回答