打开窗口对话框的切换按钮



我有一个这样的切换按钮:

<ToggleButton Name="loadSlideTitle" IsChecked="{Binding SlideTitleLoaded, Mode=OneWay}"  Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="1" Grid.RowSpan="1" Background="Transparent" Command="{Binding DataContext.LoadSlideTitleCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}">
<ToggleButton.Template>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Grid RenderTransformOrigin="0.5,0.5" x:Name="bg">
<Image x:Name ="loadSlideTitle_image" Source="/Import_TitleImport.png"/>
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver"  Value="True" />
<Condition Property="IsChecked" Value="False" />
</MultiTrigger.Conditions>
<Setter TargetName="loadSlideTitle_image" Property="Source" Value="/Import_TitleImport_Mouseover.png"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver"  Value="False" />
<Condition Property="IsChecked" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="loadSlideTitle_image" Property="Source" Value="/Import_TitleDelete.png"/>
</MultiTrigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsMouseOver"  Value="True" />
<Condition Property="IsChecked" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="loadSlideTitle_image" Property="Source" Value="/Import_TitleDelete_Mouseover.png"/>
</MultiTrigger>

<Trigger Property="ButtonBase.IsPressed"  Value ="True">
<Setter TargetName="bg" Property="RenderTransform">
<Setter.Value>
<ScaleTransform ScaleX="0.9" ScaleY="0.9"/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</ToggleButton.Template>
</ToggleButton>

它通过调用以下函数打开一个窗口对话框:

public class Slide_1_6
{
public bool SlideTitleLoaded { get; private set; }
//it holds the slide title image path
public string SlideTitleImagePath { get; private set; }

public Slide_1_6(string SlideTitleImagePath, string SlideNote)
:base(SlideNote)
{
this.SlideTitleImagePath = SlideTitleImagePath;
}

//this method opens the file dialog that let the user selects the logo image
public void LoadTitle(string projectName)
{
if (!SlideTitleLoaded)
{
// Configure open file dialog box
OpenFileDialog dlg = new OpenFileDialog();
dlg.FileName = ""; // Default file name
dlg.DefaultExt = ".png"; // Default file extension
dlg.Filter = "PNG Images (*.png)|*.png|JPG Images (*.jpg)|*.jpg|" + "JPEG Images (*.jpeg)|*.jpeg|All files (*.*)|*.*"; // Filter files by extension
dlg.Title = "Select Slide Title";
// Show open file dialog box
dlg.ShowDialog();
//if proper file is selected
if (dlg.FileName != "")
{
//store title path in local variable
string title_path = dlg.FileName;
bool titleSizeOK = CheckTitleImageSize(title_path);
//check if title image has the right size
if (!titleSizeOK)
{
SlideTitleLoaded = false;
return;
}

try
{
File.Copy(title_path, projectName + Path.GetFileName(title_path), true); //copy the selected image to the project folder
}
catch { }
SlideTitleImagePath = projectName + Path.GetFileName(title_path);
SlideTitleLoaded = true;

}
}
else
{
SlideTitleImagePath = "";
SlideTitleLoaded = false;
}

}
private bool CheckTitleImageSize(string titlePath)
{
Image image = Image.FromFile(titlePath);
if (image.Width == 1920 && image.Height == 260)
return true;
else
{
MessageBox.Show("You have selected an image with invalid resolution. Resolution must be 1920x260. Please select another image.");
return false;
}
}
}

问题是,一旦我单击该按钮,它就会在弹出窗口对话框之前切换并更改图像。我希望仅在用户选择正确的文件并在对话框关闭时切换按钮。

我已经可以通过使用普通按钮并在模型"Slide_1_6"上使用INotifyPropertyChange来实现所需的行为。但是,我想纯粹用 xaml 来做。

尝试使用切换按钮的 Tag 属性。例如:如果选择了该文件,请将 Tag 属性设置为"1",否则设置为"0"。 使用 Style.Triggers,您可以检测到更改。

具有按钮背景的示例

<ToggleButton>
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<Style.Triggers>
<Trigger Property="Tag" Value="1">
<Setter Property="Background" Value="Red" />
</Trigger>
<Trigger Property="Tag" Value="0">
<Setter Property="Background" Value="Blue" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>

将 Tag 值更改为"1"或"0"时,背景应更改。

最新更新