Hallo,
ich möchte eine eigenes WPF UserControl erstellen.
Grundsätzlich möchte ich dieses eine Listbox sein, welche einen Header hat.
Die XAML sieht wie folgt aus:
<ListBox x:Class="SListBox"
>
<ListBox.Template>
<ControlTemplate>
<Border BorderThickness="1" BorderBrush="Brown" CornerRadius="10">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Label Content="{Binding Path=Header}" Grid.Row="0" Name="lblHeader"></Label>
<VirtualizingStackPanel Margin="5" IsItemsHost="True" Grid.Row="1" />
</Grid>
</Border>
</ControlTemplate>
</ListBox.Template>
</ListBox>
Code Behind:
public partial class SListBox : ListBox
{
public string Header
{
get { return base.GetValue(HeaderProperty) as string; }
set { base.SetValue(HeaderProperty, value); }
}
public static readonly DependencyProperty HeaderProperty =
DependencyProperty.Register("Header", typeof(string), typeof(SListBox));
}
Leider bekomme ich nicht mein gewünschtes Ergebnis, bzw genauer gesagt der Header wird nicht angezeigt.
Hat jemand eine Idee, woran das liegen könnte??
Vielen Dank für Tipps!
Gruß
MacWale
ja der ist wirklich grauenhaft...ich weiß.
Ist auch nur durchs testen und probieren enstanden.
Er springt mir noch nicht mal in die Methode
private void cmdSpielStart_Click(object sender, RoutedEventArgs e)
hinein.
Die Exception tritt schon beim Laden des Formulars auf, bzw beim Laden des DataTemplates.
Die FAQ hab ich schon durch.
Das komische ist, dass die Exception beim rausnehmen des Events nicht geworfen wird.
Gruß
MacWale
Hallo
ich habe ein ResourceDictionary:
public partial class ResourceRunden : ResourceDictionary
{
public ResourceRunden()
: base()
{
InitializeComponent();
}
private void cmdSpielStart_Click(object sender, RoutedEventArgs e)
{
try
{
TurnierSpiel sp = (e.OriginalSource as FrameworkElement).DataContext as TurnierSpiel;
if (sp != null)
{
sp.SpielStart();
}
}
catch (Exception ex)
{
//throw ex;
}
}
}
Dazu folgender XAML:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:turnier="clr-namespace:TurnierPlaner.Plan;assembly=TurnierPlaner.Plan"
x:Class="ViewTurnierRunde.ResourceRunden"
>
<DataTemplate x:Key="RundenArt0" DataType="TurnierRunde">
<Grid>
//.....//
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Name="cmdSpielStart" Margin="2" Click="cmdSpielStart_Click" >
<Image Source="pack://application:,,,/SS.System.ImageLibary;Component/Actions/PlayHS.png" Height="16" Width="16"></Image>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
///
</DataTemplate>
</ResourceDictionary>
Beim Button
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Name="cmdSpielStart" Margin="2" Click="cmdSpielStart_Click" >
<Image Source="pack://application:,,,/SS.System.ImageLibary;Component/Actions/PlayHS.png" Height="16" Width="16"></Image>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
wird mir immer folgende Exception geworfen:
System.NullReferenceException wurde nicht behandelt.
Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Source=ViewTurnierRunde
StackTrace:
bei ViewTurnierRunde.ResourceRunden.System.Windows.Markup.IStyleConnector.Connect(Int32 connectionId, Object target) in d:\Kopie von Sourcen\DOT_NET\TunierPlaner\ViewTurnierRunde\ResourceRunden.xaml:Zeile 482.
Was kann ich tun..ich sehe da keinen Fehler? Sobald ich das Click Event rausnehme alles wunderbar, nur nicht so wie ich es haben will 😉
Vielen Dank für jeden Tipp!!
Gruß
MacWale
PS: Habe den Source auf das nötigeste gekürzt
Hallo,
ich möchte Items in einem Itemcontrol durchnummerieren, bzw ich würde gerne den ListIndex + 1 auf dem Formular angezeigt haben. Ist das überhaupt möglich?
<GroupBox Header="{Binding Path=Bezeichnung}" Margin="5">
<ItemsControl HorizontalContentAlignment="Stretch" Margin="5" DataContext="{Binding Path=Objekt}" ItemsSource="{Binding}" >
<ItemsControl.ItemTemplate >
<DataTemplate >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"></ColumnDefinition>
<ColumnDefinition Width="200"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Content="x."></Label>
<TextBox Text="{Binding Path=Bezeichnung}" Grid.Column="1" Margin="1"></TextBox>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</GroupBox>
Vielen Dank schonmal für Tipps!
Gruß
MacWale
Hallo, ich habe es lösen können:
Hier die Lösung:
<ItemsControl HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled" DataContext="{Binding Path=Gruppen}" ItemsSource="{Binding}">
<ItemsControl.ItemsPanel >
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True"></WrapPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Gruß MacWale
PS Frohe Ostern!!
Guten Abend zusammen.
Ich habe eine Listview mit vielen Items, ich möchte nun diese Listeview wegen der Übersicht in 2 Spalten aufteilen.
Mir fehlt gerade der Anhaltspunkt wie ich das lösen könnte.
Danke schonmal für jeden Tipp/Hilfe etc.
Gruß
MacWale
Hallo,
ich schreibe gerade ein Addin für ein Programm. Ich habe eine Vorlage in VB.NET, welche auch super funktioniert! Ich entwickel nun das ganze in C# nach, sieht soweit ganz gut aus, bis auf ein paar Funktionen von dem System.__ComObject, z.Bsp. folgende:
Public Function RequestData_(ByVal ptDateFrom As String,
ByVal ptDateTil As String, ByRef ptDataString As Variant,
ByRef plNumberOfRecords As Long, ByRef ptError As Variant, Optional
ByVal ptTypeFilter As String = "") As Boolean
Aufrufen tue ich die Funktion wie folgt:
return (bool)MyComObject.InvokeFunction("RequestData_", new Object[] { ptDateFrom, ptDateUntil, ptDataString, plNumberOfRecords, ptError ,""});
Lt. Beschreibung sind die Parameter als ByRef definiert, in denen Werte zurückgegeben werden, welche ich für den weiteren Programmablauf benötige. Wie komme ich an diese Werte??
MyComObject ist folgendes:
Allgemeiner COM-Wrapper für Späte Bindung
Vielen Dank im Vorraus!
Gruß
MacWale
Hey super klasse...
ich schreibe gerade ein Addin für ein Programm. Ich hatte eine Vorlage in VB.NET, welche auch super funktioniert! Ich entwickel nun das ganze in C# nach, sieht soweit ganz gut aus, bis auf ein paar Funktionen von dem System.__ComObject, z.Bsp. folgende:
Public Function RequestData_(ByVal ptDateFrom As String,
ByVal ptDateTil As String, ByRef ptDataString As Variant,
ByRef plNumberOfRecords As Long, ByRef ptError As Variant, Optional
ByVal ptTypeFilter As String = "") As Boolean
Aufrufen tue ich die Funktion wie folgt:
return (bool)MyComObject.InvokeFunction("RequestData_", new Object[] { ptDateFrom, ptDateUntil, ptDataString, plNumberOfRecords, ptError ,""});
Lt. Beschreibung sind die Parameter als ByRef definiert, in denen Werte zurückgegeben werden, welche ich für den weiteren Programmablauf benötige. Wie komme ich an diese Werte??
Vielen Dank im Vorraus!
Gruß
MacWale
DataContext ist gesetzt auf eine DataTable
cboKontakt.DataContext = dt;
In dieser DataTable sind alle Kontakte, die GUID ist der eindeutige Key des Kontaktes.
meinst du das?
this.comboBox1.SelectedIndex = 1;
(nullbasierend)
Ja fast...Das es so funktioniert ist mir klar. Ich will aber nicht das erste zweite oder dritte Item vorauswählen, sondern ein bestimmtes. Ich habe die GUID an der Hand und will das Item mit der GUID auswählen.
Erster Gedanke ist halt comboBox1.SelectedItem = guid, aber das geht nicht
Hallo,
ich habe eine ComboBox mit Kontakten:
<DataTemplate x:Key="KontaktTemplate" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="40"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Image Grid.Column="0" Source="Icons/kontakt.png" Height="32" Width="32" Margin="2"/>
<StackPanel Grid.Column="1" >
<!--<Grid.RowDefinitions>
<RowDefinition Height="25"></RowDefinition>
<RowDefinition Height="25"></RowDefinition>
</Grid.RowDefinitions>-->
<TextBlock Grid.Row="0" FontSize="12" Text="{Binding Path=BEZEICHNUNG}" Foreground="Black" ></TextBlock>
<TextBlock Grid.Row="1" FontSize="10" Text="{Binding Path=FIRMA}" Foreground="Black"></TextBlock>
</StackPanel>
</Grid>
</DataTemplate>
<ComboBox Grid.Column="1" Grid.Row="4" Margin="1,1,1,1" Name="cboKontakt" ItemsSource="{Binding}" ItemTemplate="{StaticResource ResourceKey=KontaktTemplate}" SelectionChanged="cboKontakt_SelectionChanged" ></ComboBox>
private void fillKontakte(string guid)
{
string sql = "Select guid, bezeichnung, firma from kontakt order by Bezeichnung";
DataTable dt = DataProvider.GetDataTable(sql, ConnectionString);
cboKontakt.SelectedValue = "guid";
cboKontakt.DataContext = dt;
}
Soweit klappt alles, doch wie wähle ich ein bestimmten Kontakt in der Vorauswahl aus. Theoretisch müsste ich ja SelectedItem setzen, jedoch was setze ich hier? Die guid zu setzen alleine reicht nicht.
Für Tipps bin ich dankbar!
Danke im Vorraus!
Hallo,
ich weiß nicht woran es liegt, dass in der folgenden Listview keine Daten angezeigt werden:
<ListView DataContext="{Binding ElementName=MainPage, Path=PostFach}" ItemsSource="{Binding}" Background="Beige" Name="viewPostbox" Margin="0,0,0,0" VerticalAlignment="Top" BorderThickness="0" HorizontalAlignment="Left" Width="260" Height="100">
<ListView.View>
<GridView>
<GridViewColumn Header="File" DisplayMemberBinding="{Binding Name}" Width="180"/>
<GridViewColumn Header="Datum" DisplayMemberBinding="{Binding Datum}" Width="80" />
</GridView>
</ListView.View>
</ListView>
Der XAML Code von der ListBox wird zur Laufzeit in ein Frame geladen (frameRight):
<Page x:Class="DokiWebManager.pageMain"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="pageMain" Name="MainPage">
<Grid Background="Beige">
<Grid Background="Beige" Width="800" Height="600" ShowGridLines="true">
<Menu Name="mnuMain" Background="BlanchedAlmond" Margin="0,0,0,0" Height="20" VerticalAlignment="Top">
<MenuItem Header="DokiWeb">
<MenuItem Header="Verlassen" Name="mnuAppExit" Click="mnuAppExit_Click" />
</MenuItem>
</Menu>
<StatusBar Height="20" Name="statusBar1" VerticalAlignment="Bottom" Background="BlanchedAlmond" Grid.Row="2" Grid.ColumnSpan="2" />
<Rectangle Margin="0,0,0,0" Name="rectangle1" Stroke="Brown" />
<Frame Margin="0,20,0,0" Height="560" Name="frameLeft" VerticalAlignment="Top" HorizontalAlignment="Left" Width="200" />
<Frame Margin="200,20,0,0" Height="560" Name="frameRight" VerticalAlignment="Top" HorizontalAlignment="Left" Width="600" />
<TreeView Background="Beige" HorizontalAlignment="Left" Margin="5,5,0,0" Name="treeMain" Width="190" Height="550">
<TreeViewItem Header="Dokumente" Name="treeItemDokumente" Selected="treeItemDokumente_Selected" />
<TreeViewItem Header="Kontakte" Name="treeItemKontakte" />
<TreeViewItem Header="Bilder" Name="treeItemBilder" />
</TreeView>
</Grid>
</Grid>
</Page>
public Collection<PostBoxFiles> PostFach { get; set; }
private void treeItemDokumente_Selected(object sender, RoutedEventArgs e)
{
PostFach = dApi.PostFach;
Uri pageUri = new Uri("pack://siteOfOrigin:,,,/XAML/pageDocument.xaml", UriKind.RelativeOrAbsolute);
this.frameRight.Source = pageUri;
}
Die Klasse PostBoxFiles sieht wie folgt aus:
public class PostBoxFiles : INotifyPropertyChanged
{
private string _file;
private DateTime _datum;
public string File
{
get { return _file; }
set
{
_file = value;
Changed("File");
}
}
public DateTime Datum
{
get { return _datum; }
set
{
_datum= value;
Changed("Datum");
}
}
private void Changed(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
#region INotifyPropertyChanged Member
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
Ich weiß nicht woran es liegt, aber ich finde den Fehler nicht warum die Daten nicht angezeigt werden! Die Collection ist aber gefüllt!
Danke für jeden Hinweis im Vorraus!
MacWale
Hallo,
Ich verwalte betsimmte Eigenschaften von PDF-Dateien (Briefe, Dokumente, etc) in einer Datenbank.
Jetzt möchte das Dateieigenschaftsdialog um ein Register erweitern (Rechtsklick Eigenschaften) um halt dort Informationen zur der PDF Datei anzuzeigen!
Es kann pro Dokument-Typ unterschiedlich aussehen!!
Ist sowas überhaupt möglich?
Gruß
MacWale
Danke für die Antworten!
Hatte vorher alles mit
SqlCeConnection conn = new SqlCeConnection();
programmiert, doch ich wollte das ganze System Datenbankunabhängig haben.
Hab es aber jetzt lösen können, ich muss in den Providernamen mit "System.Data.SqlServerCe.3.5" laden. Dann klappt alles 😉
Vielen Dank!
verwendetes Datenbanksystem: <System.Data.SqlServerCe>
Hallo,
bei ausführen des Befehles:
DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
läuft bei mir auf folgendem Fehler:
System.ArgumentException wurde nicht behandelt.
Message="Der angeforderte .Net Framework-Datenprovider kann nicht gefunden werden. Er ist ggf. nicht installiert."
providername ist ein String und mit "System.Data.SqlServerCe" gefüllt.
Was mache ich falsch?
Vilen dank im Vorraus!
ist nicht war, mit nem Panel funktioniert es, aber mit TableLayoutPanle nicht??? Woran liegt das??
nein habe ich nicht. 😦
Ja das ist klar, wenn ich eine Form erbe, dass ich im normalfall kein zugriff auf die Steuerelemente habe. Jedoch habe ich alle Elemente auf der Basisform auf protected gesetzt. Installier gerade das ServicePack1 für Visual Studio 2005, mal schauen, ob es was bringt.
Ich vererbe ja nicht die Buttons, sondern die Form. Ich will ja nicht das TableLayout oder ein Button erben.
Ja du hast mir nen Tipp gegeben mit dem Service Pack 1, lade es gerade runter. Vermutlich wird es daran liegen.
Übrigens mit nem UserControl habe ich das selbe Problem.
Ansonsten müsste ich das Table Layout weglassen, was aber unschön wäre
Projekt bereinigen bringt nix, neu geöffnet etc habe ich auch schon, aber alles schon mehrfach. Kann es sein, dass der Designer dies nicht unterstützt. Naja wäre echt blöd 😦 In dem Sinne würden mir auch Controls nicht weiterhelfen
mit public habe ich es auch schon versucht, ist negativ.
Ich muss es leider mit Forms machen 😦.
ja hab ich auch schon drüber nachgedacht, ein Usercontrol zu verwenden, aber Forms wären sinnvoller
Hallo,
ja da ist so ein kleines Schloss.
Der Modifier ist von Private auf Protected umgestellt, aber keine Änderung!
Gruß
MacWale
Hallo,
ich habe vor eine Windows Form zu vererben.
Auf der Basis Form sind die Steuerelemente drauf, die drauf sein müssen.
Alles schön und gut.
Jetzt erbe ich das ganze, rufe auch die Knostuktor aus der Basisklasse auf, und er zeigt mir nun die Steuerelemente an, wie in der Basisklasse auch. Jetzt will ich in ein TableLayout, welches in der Basisklasse ist ein neues Steuerelement drauf ziehen, leider ohne Erfolg, da es nicht funktioniert.
Was mache ich falsch?????????
Ich verwende Visual Studio 2005!
Gruß
MacWale
Ja kann schlecht debuggen da ich den Source nicht habe, sonst würd ich das ja machen
Habe die Demo mal getestet, aber bei mir läuft das Programm direkt beim Start auf ein Fehler. Kann jetzt auswendig den Fehler nicht nennen, bin gerade im Büro und zuhause habe ich es gestern abend mal getestet, bzw wollte ich testen.
Kann es evtl möglich sein, dass die DLL Probleme mit einem 64bit Betriebsystem hat. Habe Windows XP 64bit.
Ich starte gerade eine Entwicklung von einem Dokumentenmanagement System, welches auch eine Scan Anbindung haben bzw eher muss.
Gruß
MacWale
hallo @baesler,
du kannst dem mail.body html übergeben, ob mit header weiß ich nicht, musste ausprobieren. Dann muss du dem MailObject noch sagen, dass es eine html mail ist, meines wissens nach ist das die eigenschaft isHtmlbody??
Aber damit müsste es eigentlich funtkionieren
Gruß
MacWale
Hallo,
das mit dem DataSet hört sich gut an, hab ich soweit umgesetzt, bis auch den Datentyp und die Größe.
Über DataColumn bekommen ich zwar einen Datentyp, aber nicht den SQLDBType! Die Größe über die die Eigenschaft MaxLength bekomme ich auch nicht, es steht immer -1 drin.
Füllen:
string strSQL = "Select * from " + TableName;
SqlCeDataAdapter da = new SqlCeDataAdapter(strSQL, mConn);
da.Fill(mDataSet);
da.TableMappings.Add("Table", aliasTable);
da.Fill(mDataSet);
Dann hole ich mir die Tabelle in eine DataTable und überprüfe die Spalten mit ner foreach
foreach ( DataColumn spalte in myTable.Columns)
{
}
Über spalte.DataType will ich mir nun den Spaltentyp rausholen, aber dort bekomme ich den SQLDBType nicht her.
Wo wird der abgelegt??
Mfg
MacWale
verwendetes Datenbanksystem: <Microsoft SQL Server Compact>
Hallo,
ich möchte prüfen ob ein bestimmtes Feld in der Tabelle vorhanden ist. Oder erstmal schauen ob die Tabelle vorhanden ist.
Es gibt zwar die unschöne Möglichkeit mit
select feldname from tabelle
aber ich möchte ne schicke Möglichkeit wie das in Java auch Möglich ist. Dort kann ich die Tabellen in einer Datenbank mit einer Schleife durchforsten.
Zu allerletzt wäre es noch genial, wenn ich den Typ des Feldes überprüfen könnte.
Vielen Dank im Vorraus!
Gruß
MacWale
Hallo,
ich möchte bei einem Setup ein Autostarteintrag in die Registry schreiben, so dass das installierte Programm bei Windowsstart im Hintergrund startet.
Wie lös ich das am geschicktesten? ich könnte auch nen Autostart eintrag im startmenü machen, aber das will ich nicht unbedingt.
Gruß
MacWale
au mist,
da hätt ich auch selbst drauf kommen können 🙂
Danke vielmals!!!!!
DANKE, DANKE, DANKE!
Gruß
MacWale
verwendetes Datenbanksystem: SQL Server Compact Edition-Datenbank für lokale Daten
Hallo,
Ich habe eine lokale Datenbankbankdatei und möchte auf die Datenbank zugreifen. Habe vorher ACCESS im Projekt benutzt und will nun auf die *.sdf Datei zugreifen. Vorher hatte ich folgenden ConnectionString, wie passe ich den nun an?
danke im vorraus für jede Info!
gruß
MacWale
Ja mit ClientSize habe ich es auch schon versucht, aber der selbe Effekt.
Ja gut, dass wird zwar nen bisschen arbeit, aber okay, wird wohl das beste sein, um das problem zu lösen.
ja, aber ich will halt nicht immer das selbe anzeigen!
links bleibst fast immer gleich, nur rechts unten wird sich viel ändern während der laufzeit.
Mit VB6 ging das immer sehr gut, okay ist uralt, aber da ging sowas
mit this.Height und this.Width.
ja damit hab ich auch versucht, aber dadurch bekomme ich auch den scrollbalken.
will die fenster so groß haben, dass sie die breite des mdis komplett ausfüllen, aber nicht breiter werden, so dass der scrollbalken erscheint
Hallo,
ich habe eine MDI Form, in der ich verschieden Formular darstellen will.
Ich will diese Formulare fest positionieren, was auch eigentlich funktioniert.
Ich passe die MDI Childs in der Größe an, so dass ich links am Rand ein Formular habe, rechts oben, links unten, rechts unten. Kann aber auch mal sein, dass ich rechts nur ein Formular habe, und links ein Formular.
Meine Vorgehensweise:
Ich lade die gewünschten Formular und positioniere sie:
private void form_rezise(object sender, EventArgs e)
{
if (Baumansicht != null)
{
Baumansicht.Top = 0;
Baumansicht.Left = 0;
Baumansicht.Height = this.DisplayRectangle.Height * 60 / 100;
Baumansicht.Width = this.DisplayRectangle.Width * 30 / 100;
}
if (mDokumentList != null)
{
mDokumentList.Left = this.DisplayRectangle.Width * 30 / 100;
mDokumentList.Width = this.DisplayRectangle.Width - Baumansicht.Width;
mDokumentList.Height = this.DisplayRectangle.Height * 40 / 100;
}
}
Es werden hier momentan die formulare baumansicht und mDokumentlist gleichzeitig angezeigt. Jedoch habe ich das Problem, wenn ich diese beiden Formulare anzeige, dann gehen Sie über die Größe des MDIs herraus, so dass unten eine Scrollbar erscheint. Dies will ich vermeiden. Wie bekomme ich die Größe vom MDI Fenster herraus, wo ich die Fenster positioneren kann??
Vielen Dank im Vorraus