|
I'm trying to learn WPF doing some simple stuff before tackling a real project. The first thing I've tried to do is to mock up an Excel sheet used to review case files. It uses 40 some columns to collect reviewers' input. At least 5 columns use the same Excel data validation to limit the responses to:
Yes,
No, or
Unknown
So..in porting this to SQL Server I've put check constraints in that require one of those 3 entries.
In mocking up the data entry form in WPF I would like to use a combobox that IS BOUND to one of those SQL columns and offers the 3 permissible choices. It seems to me that the ideal approach would be to create a template combobox with the 3 choices, and then use and re-use the template for each of the constrained columns.
Maybe my searching skills are poor, but I can't seem to find any explanations or examples of doing something like this, even though it seems as though this sort of thing would be used often.
Where do I start?
|
|
|
|
|
Normally, I'd approach this by using MVVM to bind to the items using a user control which contains the combo box, and the VM would contain the values (along with the validation). It's fairly straightforward, so I'd suggest that you have a read up on MVVM (that's Model View ViewModel).
"WPF has many lovers. It's a veritable porn star!" - Josh Smith As Braveheart once said, "You can take our freedom but you'll never take our Hobnobs!" - Martin Hughes.
My blog | My articles | MoXAML PowerToys | Onyx
|
|
|
|
|
Pete -
Thanks for the response. I have been reading up on MVVM, but my 'programming' background has mostly been Excel VBA and some basic/rudimentary WinForm apps. It's a big step to grasp the concepts behind MVVM.
|
|
|
|
|
It is - but once you get it, it makes tasks like this so much simpler.
"WPF has many lovers. It's a veritable porn star!" - Josh Smith As Braveheart once said, "You can take our freedom but you'll never take our Hobnobs!" - Martin Hughes.
My blog | My articles | MoXAML PowerToys | Onyx
|
|
|
|
|
Hello,
I am trying to build a WPF application using blend 3. I need to display HTML contents in a portion of my application window. I tried to use 'web browser' control for the purpose, it renders the HTML as desired. But the problem is when I apply a simple animation (change width) for the 'Web browser' control, using story board, the animation doesn’t take effect. I tried to play the story board at design time, animation is played as desired.
Can you please tell me how can I create animation for ‘Web browser’ and if it is possible please specify a sample? Are there any alternatives? Thanks in advance.
Regards,
Hassan
|
|
|
|
|
What kind of animations are you trying to apply to the control?
Post some code here - someone might have a suggestion or two.
|
|
|
|
|
In following code I try to animate webbrowser control directly and also by adding it to a dockpanel. In both cases I have no success, take a look
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Class="MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480" mc:Ignorable="d">
<Window.Resources>
<Storyboard x:Key="Ani1">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="webB1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
<SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:01" Value="1"/>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="webB1" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleX)">
<SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:01" Value="-12"/>
<SplineDoubleKeyFrame KeyTime="00:00:01.7000000" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="ani2">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="dockPanel" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleX)">
<SplineDoubleKeyFrame KeyTime="00:00:00.5000000" Value="19"/>
<SplineDoubleKeyFrame KeyTime="00:00:01" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded"/>
</Window.Triggers>
<Grid x:Name="LayoutRoot">
<Button x:Name="btn1" HorizontalAlignment="Left" Margin="17,113,0,0" VerticalAlignment="Top" Width="56" Height="27" Content="Load" Click="btn1_Click"/>
<Button x:Name="btn2" HorizontalAlignment="Left" Margin="17,144,0,0" VerticalAlignment="Top" Width="56" Height="26" Content="Start" Click="btn2_Click"/>
<DockPanel x:Name="dockPanel" Margin="111,93,51,68" LastChildFill="False" RenderTransformOrigin="0.5,0.5" Background="Black">
<DockPanel.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</DockPanel.RenderTransform>
<WebBrowser x:Name="webB1" Margin="0,41,0,44" Width="462" Height="200" RenderTransformOrigin="0.5,0.5" d:LayoutOverrides="VerticalAlignment">
<WebBrowser.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform/>
</TransformGroup>
</WebBrowser.RenderTransform>
</WebBrowser>
</DockPanel>
</Grid>
</Window>
VB code to call
imports System.Windows.Media.Animation
Class MainWindow
Private Sub btn1_Click(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
dim uri1 as new Uri("http://www.codeproject.com")
webB1.Navigate(uri1)
End Sub
Private Sub btn2_Click(ByVal sender as Object, ByVal e as System.Windows.RoutedEventArgs)
'TODO: Add event handler implementation here.
Dim Lobj as Storyboard = directcast(me.Resources("ani2"), Storyboard)
Lobj.Begin
End Sub
End Class
Thanks
|
|
|
|
|
I want to create an image programatically, but I haven't been able to find a way to do it. I want to create a bitmap, render some text onto it, rotate it and then use the bitmap in a Image control.
EDIT===============
My current thought is to have the server side create the image and pas it back to me, but man, what a pain in the ass...
.45 ACP - because shooting twice is just silly ----- "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." - J. Jystad, 2001
|
|
|
|
|
If your image is an icon or a shape, you could actually use a path object. In thiw way, you dont need to actually use a bitmap or a jpeg.
These paths can be creted using Expression blend.
|
|
|
|
|
It's not a path. I want to create a transparent rectangle, render text on it, and then rotate it. The reason for that is I need a better appearance than what Silverlight can produce if I programatically add rotated content.
.45 ACP - because shooting twice is just silly ----- "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." - J. Jystad, 2001
|
|
|
|
|
Do you have to do it in the client? If you can do it on the server, I'd just create a memory device context, and draw on that one.
|
|
|
|
|
Michel Godfroid wrote: Do you have to do it in the client?
That would be preferred, but it looks like it's impossible.
Michel Godfroid wrote: If you can do it on the server, I'd just create a memory device context, and draw on that one.
Yeah, I mentioned that in my edit. At this point, I have to decide whether I want to do it in our web service, or create an aspx page that does it in the code behind.
.45 ACP - because shooting twice is just silly ----- "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." - J. Jystad, 2001
|
|
|
|
|
|
See new message in this forum.
.45 ACP - because shooting twice is just silly ----- "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." - J. Jystad, 2001
|
|
|
|
|
I am trying to display an exception in a treeview with each innerexception being a child.
Here is what I have so far, but this only displays the exception.tostring() values.
<GridViewColumn Header="Exception" Width="Auto" DisplayMemberBinding="">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TreeView ItemsSource="{Binding Path=Exception}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type sys:Exception}"
ItemsSource="{Binding Path=InnerException}">
<TextBlock Text="{Binding Path=Message}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
Troy Zajac
|
|
|
|
|
I think the real problem with this method is that InnerException is not a collection. You may be able to use a converter to convert InnerException to an array of exception objects. However, there is a much easier method.
Here is a simple sample Window that does something similar to what I think you want.
XAML
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type s:Exception}">
<Expander Margin="20,0,0,0" Header="{Binding Message}" Content="{Binding InnerException}"/>
</DataTemplate>
</Window.Resources>
<DockPanel>
<Button DockPanel.Dock="Bottom" Click="Button_Click">Error!</Button>
<ContentPresenter Name="Bob" />
</DockPanel>
</Window>
CODE (Pardon the VB)
Class MainWindow
Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
Try
a()
Catch ex As Exception
Me.Bob.Content = ex
End Try
End Sub
Private Sub a()
Try
b()
Catch ex As Exception
Throw New ArgumentException("WOW!", ex)
End Try
End Sub
Private Sub b()
Try
c()
Catch ex As Exception
Throw New InvalidCastException("no good", ex)
End Try
End Sub
Private Sub c()
Throw New InvalidOperationException("Bad magic")
End Sub
End Class
I use WPF's awesomeness with DataTemplates. Any exception object it displays will look like an Expander.
|
|
|
|
|
Hi,
I have a problem I can't get solved since days. I'm actually testing nHydrate to generate a DAL to my database.
The case is pretty simple :
I have an object called Maintable
class Maintable {
bool? Booleanfield { get; set; }
DateTime? Datefield { get; set; }
int Idmaintable { get; }
string Stringfield { get; set; }
int? Tostatic { get; set; }
}
In my database I have a static data table ; nHydrate generated for it a collection of objects
class Staticdatatable {
int Idstatic { get; }
string Name { get; }
}
The "Tostatic" field of Maintable object points to Idstatic field in Staticdatatable
So, now I'm trying to perform the following binding :
- Bind combobox list to Staticdatatable collection (this works fine)
- Bind combobox selected item to the Id of the Maintable object (problems start here)
I've bound all my controls in the window correctly to the Maintable object ; but I can't have the combobox displays the name of the corresponding Tostatic value.
The code-behind is :
Maintable CurrentItem = ...
EditionPanel.DataContext = CurrentItem;
cmbStatic.DataContext = StaticdatatableCollection.RunSelect();
The XAML code for combobox is :
<ComboBox x:Name="cmbStatic" ItemsSource="{Binding}" DisplayMemberPath="Name" SelectedValuePath="????" SelectedValue="????"></ComboBox>
My question is : How can I bind the Selected Value to the CurrentItem.Tostatic field defined in code-behind ?
If required I can post the entire code.
Thanks by advance for your help.
|
|
|
|
|
Post here your XAML piece of code would be helpful.
Parwej Ahamad
ahamad.parwej@gmail.com
|
|
|
|
|
OK Sry for late answer
here's the XAML Code (please note I tried to use a textblock to bind the combobox to)
<Window x:Class="WpfnHydrate.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:nhy="clr-namespace:Maxmat.TestnHydrate.Business.Objects;assembly=Maxmat.TestnHydrate"
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="Window1" Height="379" Width="461" Loaded="Window_Loaded">
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Width" Value="50"></Setter>
<Setter Property="Margin" Value="10"></Setter>
</Style>
</Window.Resources>
<StackPanel>
<Border>
<WrapPanel>
<ComboBox Width="50" x:Name="lstMainTable" ItemsSource="{Binding}" DisplayMemberPath="Idmaintable" SelectionChanged="lstMainTable_SelectionChanged"></ComboBox>
</WrapPanel>
</Border>
<StackPanel x:Name="EditionPanel">
<WrapPanel>
<Label>StringField:</Label>
<TextBox Text="{Binding Path=Stringfield, Mode=TwoWay}"></TextBox>
</WrapPanel>
<WrapPanel>
<Label>DateField:</Label>
<my:DatePicker SelectedDate="{Binding Path=Datefield, Mode=TwoWay}" Height="25" Name="datePicker1" Width="115" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit" />
</WrapPanel>
<WrapPanel>
<Label>BooleanField:</Label>
<CheckBox IsChecked="{Binding Path=Booleanfield, Mode=TwoWay}"></CheckBox>
<Label>Static Combo</Label>
<ComboBox x:Name="cmbStatic" ItemsSource="{Binding}" DisplayMemberPath="Name" SelectedValuePath="Idstatic" SelectedValue="{Binding Path=Text,ElementName=ToStaticValue,Mode=OneWay, diag:PresentationTraceSources.TraceLevel=High}"></ComboBox>
<TextBlock x:Name="ToStaticValue" Text="{Binding Path=Tostatic}"></TextBlock>
</WrapPanel>
<WrapPanel Margin="10" >
<Button x:Name="cmdNew" Click="cmdNew_Click">New</Button>
<Button x:Name="cmdSave" Click="cmdSave_Click">Save</Button>
</WrapPanel>
</StackPanel>
</StackPanel>
</Window>
|
|
|
|
|
Hi all,
I want to create database populated menu where menu.xaml file should be generated dynamically means my stroed procedure will return result on basis of user Group and that should assign or create xaml file and now dynamically generated file will assign to menu control ..
I have done this in .Net site but dont know its possible with silverlight or not.
I am new to Silverlight , So Please help me...
Reasons are not Important but Results are Important.
Swati Tripathi
|
|
|
|
|
This is possible in Silverlight.
However, you cannot access stored procedures using Ado.Net (as Ado.Net are not available in SL).
You will need to use either a web service or entity framework.
|
|
|
|
|
Thanks for your reply
but i want to know silverlight code sample & yes i am aware of SL will understand xml only.
I hav tried sample which is given in demo for menu but Over there we have static menu.xaml which i dont want to use .
Please help me ....
Reasons are not Important but Results are Important.
Swati Tripathi
|
|
|
|
|
See here for a menu control example.
|
|
|
|
|
Hi..how can I apply textblock properties to Path???
I have convert textblock to path i have applied font , size & color property to it but problem have occured when I am trying to apply textwrapping, alignment, textdecoration & font weight properties but these are not working.
any solution to resolve this problem???
reply fast
thnxxx
|
|
|
|
|
This may give you some ideas
|
|
|
|