|
Can you change your code to the following and see if you see the MessageBox?
private void Button_Click(object sender, RoutedEventArgs e)
{
MyTestDialog dialog = new MyTestDialog();
bool? ret = dialog.ShowDialog();
if (ret == true)
{
MessageBox.Show("DialogResult returned true!");
}
}
My dialog also works, but my DialogResult is never set to true.
I will try to create a sample as well in the meantime.
|
|
|
|
|
K, I just tried that. I worked fine for me.
Visual Studio is an excellent GUIIDE.
|
|
|
|
|
I have created a sample and have tried your method and they both work. I fail to see any difference in that than what is in my original app.
I guess I have some digging to do. I'll get to the bottom of it.
Thanks for your responses...
|
|
|
|
|
OK. I found it.
There was an event that was being fired from a previous stage in development that was never removed, and it was setting the DialogResult to false.
It was confusing to me because the DialogResult was showing false immediately after the call to DialogResult = true; .
I am still not used to WPF and setting event handlers in XAML(Delphi convert).
Sorry for all the trouble, but thatnks a lot for trying to help.
|
|
|
|
|
I'm glad you figured it out. Remember to add "[Solved]" to the subject line on your original post.
Visual Studio is an excellent GUIIDE.
|
|
|
|
|
Hi everyone I'm new at wpf and I got some easy question:How can I get select item value from listbox? I wrote this code:
label1.Content = listBox1.SelectedItem.ToString();
and I get:System.Cindows.Control.ListBoxItem:Test1;
how can I get just Test1.
Thanks in advance!!
SOLVED
modified on Sunday, August 23, 2009 10:58 AM
|
|
|
|
|
What type of object is in ListBox1?
modified 27-Feb-21 21:01pm.
|
|
|
|
|
|
Don't be a retard and delete your posts. It makes the forums messy. Tell us how you solved it, so others can benefit.
Christian Graus
Driven to the arms of OSX by Vista.
Read my blog to find out how I've worked around bugs in Microsoft tools and frameworks.
|
|
|
|
|
ListBoxItem item=listbox1.selectedItem();
label1.content=item.ToString();
Solution of problem
modified on Sunday, August 23, 2009 11:00 AM
|
|
|
|
|
|
Greetings,
I'm trying to throw together a quick silverlight proof of concept, but I'm stuck on a slight issue.
Let's say I have a base class (we'll call it Mammal) and two derived classes (dog and cat, respectively). I have an ObservableList<Mammal> that holds a whole bunch of cats and dogs.
Now, I have a listbox defined like so:
<ListBox x:name="lstMammals">
...
</ListBox>
A little ways further down, I have a ContentControl (I'm not sure if this is the right control to use here) that contains a StackPanel with two user controls in it. One of the user controls handles dogs and the other cats. How do I do the binding in XAML in such a way that when I select an item in the listbox that the appropriate user control pops up for editing it?
Or am I looking at the problem wrong?
Thanks,
Will
|
|
|
|
|
It sounds like you want a master/detail scenario...
Unfortunately, Silverlight doesn't support the rich, flexible data template
bindings to do this like WPF has, so you'll need a little code.
You can handle the listbox's selectionchanged event, and in your
handler show a detail control appropriate for the type of the selected item.
A search on "Silverlight master detail" yields several examples, like this
one: Using User Controls to Implement Master/Detail Scenarios[^]
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
This is one for you WPF gurus. Basically, I want a button to pulsate continuously (i.e., fade from one color to another and back, then repeat forever). I've got that working, but it does not work under another condition. I also want to be able to change styles at runtime. I have the runtime style changing working and I have the pulsating button working, but not both at the same time. The problem seems to be that I'm using Button.Loaded as the event trigger that begins the storyboard. However, if I swap the style after the button has already loaded, that storyboard never starts, so the animation doesn't execute. I was thinking there was perhaps another event I could use (such as an "on style switch" event), but I'm really at a loss. Here is some simple code to help you understand the problem:
First, I have a resource dictionary stored in "AnimatedStyleDictionary.xaml". This contains the style for the pulsating button, as shown below:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style TargetType="Button">
<Setter Property="Button.Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<Rectangle>
<Rectangle.Fill>
<SolidColorBrush x:Name="rectFill" Color="Yellow" />
</Rectangle.Fill>
</Rectangle>
<ContentPresenter Content="{TemplateBinding Button.Content}" />
</Grid>
<ControlTemplate.Triggers>
<EventTrigger RoutedEvent="Button.Loaded">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="rectFill"
Storyboard.TargetProperty="Color"
To="Blue"
AutoReverse="True"
RepeatBehavior="Forever"
Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Next, I have a Window with a button on it.
<Window x:Class="CodeProjectSample_RuntimeSwapAnimatedStyle.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Button Click="Button_Click">Hello</Button>
</Window>
When that button gets clicked, the application style gets switched (I know this is a poor technique, but I wanted to trim the code to a minimum for this sample):
private void Button_Click(object sender, RoutedEventArgs e)
{
Application.Current.Resources.MergedDictionaries.Add((ResourceDictionary)Application.LoadComponent(new Uri(@"AnimatedStyleDictionary.xaml", UriKind.Relative)));
}
The above code is where the failure occurs. The style gets applied (I can confirm because the button turns yellow), but the animation does not fire. Also, I have confirmed that the animation does work. If I modify the code to load the style in the Window constructor rather than the button, the animation works fine. However, that is not a working solution, as I want the user to be able to change between styles at runtime. Here is the code that causes the animation to work:
public Window1()
{
Application.Current.Resources.MergedDictionaries.Add((ResourceDictionary)Application.LoadComponent(new Uri(@"AnimatedStyleDictionary.xaml", UriKind.Relative)));
InitializeComponent();
}
Any help you could provide would be greatly appreciated!
Learn as if you would live forever, live as if you would die tomorrow.
modified on Thursday, September 3, 2009 6:29 PM
|
|
|
|
|
Did you try exposing an custom event that gets raised when the style changes? Then your event can fire when you app needs it to.
modified 27-Feb-21 21:01pm.
|
|
|
|
|
Great idea, that should cut my programming effort down about 100x. However, that still means I need to have every Window/Page subscribe to that event. Do you know of any way to force an event to fire on every Window/Page of a WPF application? Or, is there some way for an EventTrigger to subscribe to an event that does not get routed through the control that it is attached to (e.g., a static event on a class)? I'd rather cut my effort down by 1000x than "just" 100x
Visual Studio is an excellent GUIIDE.
|
|
|
|
|
Why not have the style subscribe to the event? Instead of Loaded, subscribe to MyStyleChanged event?
modified 27-Feb-21 21:01pm.
|
|
|
|
|
Can you post an example of how I might do that (some code, or perhaps an article)? At least through event triggers, I only know how to subscribe to events that actually get routed through the control (in this case, a button) the event trigger is being applied to. I'm not sure how I would go about subscribing to an event on a static class (such as MyApplication.StyleChanged).
Visual Studio is an excellent GUIIDE.
|
|
|
|
|
I may have figured out a solution, although it's a little sloppy. I'll post the code once I get it tested, but here's the idea:
- Create a custom control. Let's call this control "StyleChangedControl".
- StyleChangedControl will expose a custom event, StyleChanged.
- When a StyleChangedControl constructor is called, it will subscribe itself to the static event, StyleChangedControl.ApplicationStyleChanged. We'll call this new StyleChangedControl "NewStyleChangedControl".
- When I change the application style, I will call StyleChangedControl.NotifyOfStyleChange() (a static method).
- NotifyOfStyleChange() will fire the StyleChangedControl.ApplicationStyleChanged event (each NewStyleChangedControl will receive notification of that event).
- Once NewStyleChangedControl gets notification of the ApplicationStyleChanged event, it will itself raise its own StyleChanged event.
- In the resource dictionary that declares the style that contains the button, there will be an instance of StyleChangedControl.
- The button will have an event trigger that is subscribed to that NewStyleChangedControl's StyleChanged event.
- When that StyleChanged event gets fired, the event trigger will recognize it, and will then initiate an animation. This will accomplish the goal of firing an animation when the application style changes.
Effectively, I create a custom control that has a custom event that gets fired by the custom control class. There is a static method on that custom control class that allows another class to force the event to fire. Every single instance of the custom control will then receive that event. That event will be recieved by the event trigger in the style and will initiate the animation.
Anyway, that's all very confusing and it seems there must be an easier way. I'm not even sure it will work. I'll get back to you when I have some code to present. In the meantime, feel free to poke holes in the above process
Visual Studio is an excellent GUIIDE.
|
|
|
|
|
Seems overly complex. Give this a try.
In the OnStyleChnaged method you can start and stop your storyboards as needed.
Public Class MyButton
Inherits Button
Protected Overrides Sub OnStyleChanged(ByVal oldStyle As System.Windows.Style, ByVal newStyle As System.Windows.Style)
MyBase.OnStyleChanged(oldStyle, newStyle)
End Sub
End Class
modified 27-Feb-21 21:01pm.
|
|
|
|
|
Hmm, I'm not sure that will work, as you don't have access to the animation from the MyButton.OnStyleChanged method. Also, I'm not quite sure I like the idea of inheriting from every control that I want to be able to animate on a style switch. However, I got my technique coded and it ain't pretty, but it works. Here is the code in all its horrific glory:
The resource dictionary in "AnimatedStyleDictionary.xaml":
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1">
<Style TargetType="Button">
<Setter Property="Button.Template">
<Setter.Value>
<ControlTemplate>
<Grid>
<local:StyleChangedControl x:Name="MyStyleChangeCon" />
<Rectangle>
<Rectangle.Fill>
<SolidColorBrush x:Name="rectFill" Color="Yellow" />
</Rectangle.Fill>
</Rectangle>
<ContentPresenter Content="{TemplateBinding Button.Content}" />
</Grid>
<ControlTemplate.Triggers>
<EventTrigger SourceName="MyStyleChangeCon" RoutedEvent="local:StyleChangedControl.StyleChange">
<BeginStoryboard>
<Storyboard>
<ColorAnimation
Storyboard.TargetName="rectFill"
Storyboard.TargetProperty="Color"
To="Blue"
AutoReverse="True"
RepeatBehavior="Forever"
Duration="0:0:1" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
The main window XAML (just a button really):
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Button Click="Button_Click">Change Style</Button>
</Window>
The C# code behind the main window:
public partial class Window1 : Window
{
public Window1() {InitializeComponent();}
private void Button_Click(object sender, RoutedEventArgs e)
{
Application.Current.Resources.MergedDictionaries.Add(
(ResourceDictionary)Application.LoadComponent(
new Uri(@"AnimatedStyleDictionary.xaml", UriKind.Relative)));
Thread t = new Thread(new ThreadStart(delegate()
{
this.Dispatcher.Invoke(new ThreadStart(delegate()
{
StyleChangedControl.NotifyOfApplicationStyleChange();
}));
}));
t.Start();
}
}
The magical control that sends notifications of application style updates:
public class StyleChangedControl : Control
{
private static event ThreadStart ApplicationStyleChange;
public event RoutedEventHandler StyleChange
{
add
{
AddHandler(StyleChangeEvent, value);
}
remove
{
RemoveHandler(StyleChangeEvent, value);
}
}
public static RoutedEvent StyleChangeEvent =
EventManager.RegisterRoutedEvent("StyleChange",
RoutingStrategy.Direct, typeof(RoutedEventHandler),
typeof(StyleChangedControl));
public static void NotifyOfApplicationStyleChange()
{
if (ApplicationStyleChange != null)
{
ApplicationStyleChange();
}
}
public StyleChangedControl()
{
this.Visibility = Visibility.Collapsed;
ApplicationStyleChange += this.OnStyleChange;
}
private void OnStyleChange()
{
RoutedEventArgs e = new RoutedEventArgs(StyleChangeEvent);
RaiseEvent(e);
}
}
Like I said, it ain't pretty, but it works. Since I figured out my own solution, I'm going to mark this as solved. Thanks for all your ideas, Karl!
Visual Studio is an excellent GUIIDE.
|
|
|
|
|
While setting up a service reference for my silverlight app I keep getting the warning:
Web services at 'webserver' might not be accessible due to cross-domain restrictions:
For more details please contact the web server administrator or press F1 after selecting this warning
I've setup both a clientaccesspolicy.xml and crossdomain.xml in the web sites root directory. As far as I can tell they are configured correctly. But for some reason my Silverlight app seems to be either not seeing them or ignoring them.
If I browse to the file off my web root they are visible http://[URL]/crossdomain.xml etc.
Are there any secret ninja setting for getting this to work correctly? Web site permissions or script access settings?
clientaccesspolicy.xml
<?xml version="1.0" encoding="utf-8"?>
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="http://*" />
<domain uri="https://*" />
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
crossdomain.xml
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
|
|
|
|
|
Apparently visual studio was the name of my pain. When I setup my Service Reference, Visual Studio changed that URL it was actually supposed to be pointing to in my ServiceReferences.ClientConfig file.
So instead of pointing to <endpoint address="http://[IP Address]/SilverlightExample/CommunicationService.svc" that it was supposed to.
Visual Studio tried to point to: <endpoint address="http://[Machine Name].local/SilverlightExample/CommunicationService.svc"
Why on Earth it decided to re-write the URL I gave it for the service I have no idea.
|
|
|
|
|
Hello,
I'm an experienced programmer and I need to write a program capable of displaying a music sheet on screen.
My problem resides on the technology used for display. I first thought of OpenGL as I have experience with it and the TAOFramework that makes the use of OpenGL possible on .NET.
Then, well I have extensive knowledge of windows forms and all but I'm not really up to date on the latest versions of the framework so I think it could be done with WPF Microsoft marketted as wonderful.
So; my question for those still reading: could I write a fast, customm controller capable of displaying music sheet using WPF and if so could someone point me to some good starter page?
Thank you!
|
|
|
|
|
If it needs to be fast, I wouldn't use .Net at all...
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|