Hallöchen Gemeinde.
Ich hätte da mal eine - vielleicht blöde - Frage. Welchen Vorteil hätte ich, wenn ich das Geld für die PRO - Version in die Hand nehme? Bei den meisten Anbietern ist das dann doch ein recht hoher Invest.
Es ist ja bald Weihnachten und ich überlege gerade, was ich mir schenken könnte. 😉
Zitat von Abt
"dürfen". Es heisst "dürfen". "müssen" würde ausdrücken, was wäre was schlechtes 😉
Warum gibt's hier eigentlich immer noch keinen "Like" Button? 😉
Hallo Freunde!
Ich habe ja geschrieben, dass es nicht eilt, also bin ich erst jetzt dazu gekommen, mich dieser Kuriosität weiter zu widmen.
Wirf doch mal so lange Inhalte raus, bis Du einen deutlichen Größenunterschied sehen kannst.
Habe ich andersrum gemacht: Ein leeres Projekt erstellt und nach und nach die Inhalte eingefügt. Sehr verwundert hat mich die Tatsache, dass nichts fehlte und die exe dann plötzlich doch nur knappe 500k hatte. Wird wohl ein miraculum bleiben, aber stört ja nicht weiter.
Korrekt. Deswegen hab ich extra auch von "aktuell" gesprochen, nicht von "Steinzeit". 😉
Nicht ganz Steinzeit. Nur eben alte Geräte.
Die maximale Größe eine Exe-Datei unter Windows kann aktuell 4 GB betragen.
Da stand mir dann doch kurz die Klappe offen. Darauf war ich nicht vorbereitet. Ich erinnere mich noch an meine erste Festplatte. Die hatte 10MB, kostete fast 1000 Mark und wog über 1 kg. Da hat man sich früh daran gewöhnt, mit den vorhandenen Ressourcen sparsam umzugehen. Rechne mal hoch, wie schwer die Festplatte mit der damaligen Packungsdichte wäre, wenn dort in 4GB - Programm laufen müsste. Ganz zu schweigen vom Arbeitsspeicher (damals Erweiterung von 4 auf 8 MB schlappe 500 DM).
Für die Jüngeren: DM war die "Deutsche Mark". Damit hat man in der "Steinzeit" bezahlt 😉
Die Self - Contained Geschichte gefällt mir. Eignet sich sehr gut für ältere Geräte im Inselbetrieb.
Hallöchen Palladin.
Zunächst einmal Dankeschön für Deine schnelle Antwort.
Ich habe nur ganz wenige, kleine Resourcen eingebettet. Das sind ein paar Icons und ein paar Fonts - das war's.
Ich hab gerade eine WPF Anwendung mit 4.8 und Microsoft.Xaml.Behaviors, Prism.WPF und Prism Core erstellt, sonst nichts.
Der Debug-Build ist unter 2 MB groß.
Auch ich hab grad mal ein solches Projekt erstellt. Da ist die exe grad mal süße 8K "groß".
Und Du solltest auf das neue .NET umsteigen - macht vieles deutlich einfacher.
Z.B. ist die csproj-Datei deutlich übersichtlicher.
Das hat einen bestimmten Grund: Die Geräte auf denen das Progrämmchen laufen soll, sind meistens sehr alt und meistens nicht mit dem Internet verbunden. Mein kleines Testgerät hier wollte die - zum Glück testhalber schnell erstellte - .net Anwendung nicht starten. Deswegen bin ich zähneknirschend auf Framework 4.8 zurück. Da läuft das Vorgängermodel meines Programmes wunderbar drauf.
Liebe Forenmitglieder,
ich programmiere mir gerade eine lustige kleine Applikation. Mir fällt unangenehm auf, daß die .exe - Datei, die mir Visual Studio da erstellt, mit ihren knapp über 12 MB doch etwas groß erscheint.
Mein vorheriges Projekt war ein sehr mächtiges Tool mit sehr vielen Features und schlappen 40.000 Zeilen mehr Code. Die Exe - Datei von diesem Projekt ist schlanke 435 K groß.
Die einzigen (so far) Verweise sind auf die Microsoft.Xaml.Behaviors und die Prism.WPF und Prism Core. Das ist denke ich mal nicht der Grund dafür. Ich habe die Projekteigenschaften dieser beiden Projekten verglichen, aber keinen Unterschied feststellen können.
Noch kurz zu den Eckdaten:
Ich verwende VS2022, das Zielframework ist das .NET Framework 4.8
Hat jemand eine Idee?
Eilt aber nicht.
Ich habe schon im Internet recherchiert, aber noch nichts gefunden... 😠
Als ich mit WPF angefangen habe, war mein größtes Problem, die richtigen Suchbegriffe auszuwählen. Aber das kommt mit der Zeit.
Die Vorgehensweise mit dem ViewModel eröffnet Dir ungeahnte Möglichkeiten. Momentan fluchst Du wahrscheinlich noch mehr als Du tippst (so war's bei mir). Aber in 3 Monaten wirst Du es lieben. 😉
Gude TH69,
ich habe den DataContext des Usercontrols auf "Self" gesetzt (darüber bin ich auch schon gestolpert)
Nach einigem hin- und hertesten, lesen, lernen und verstehen, hab ich's jetzt hingekriegt. Dazu ein kleines Testprojekt gebaut. Folgendermaßen sieht das jetzt aus:
<UserControl x:Class="_090_UserControlZeuch.LabeledSlider"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:_090_UserControlZeuch"
mc:Ignorable="d"
d:DesignHeight="100" d:DesignWidth="400"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="6*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Label Content="{Binding SliderLabel}" Foreground="Black"
Grid.Column="0" FontSize="25"
FontWeight="Bold"
HorizontalAlignment="Left"/>
<Slider x:Name="sld_Value" Grid.Column="1"
Minimum="{Binding SliderMinVal}"
Maximum="{Binding SliderMaxVal}"
Value="{Binding SliderValue}"
VerticalAlignment="Center"
SmallChange="10" LargeChange="100"/>
<Label x:Name="Werte" Grid.Column="2"
Foreground="Black" FontSize="25"
FontWeight="Bold"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Content="{Binding ElementName=sld_Value,Path=Value}"/>
</Grid>
</UserControl>
Und meine schönen neuen (und endlich auch von mir verstandenen - dankeschön ABT 😘 ) DependencyProperties
using System.Windows;
using System.Windows.Controls;
namespace _090_UserControlZeuch
{
/// <summary>
/// Interaktionslogik für LabeledSlider.xaml
/// </summary>
public partial class LabeledSlider : UserControl
{
public static readonly DependencyProperty SliderValueProperty =
DependencyProperty.Register("SliderValue", typeof(double),
typeof(LabeledSlider), new FrameworkPropertyMetadata(default(double),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public static readonly DependencyProperty SliderLabelProperty =
DependencyProperty.Register("SliderLabel", typeof(string),
typeof(LabeledSlider), new FrameworkPropertyMetadata(default(string)));
public static readonly DependencyProperty SliderMinValProperty =
DependencyProperty.Register("SliderMinVal", typeof(int),
typeof(LabeledSlider), new FrameworkPropertyMetadata(default(int)));
public static readonly DependencyProperty SliderMaxValProperty =
DependencyProperty.Register("SliderMaxVal", typeof(int),
typeof(LabeledSlider), new FrameworkPropertyMetadata(default(int)));
public double SliderValue
{
get => (double)GetValue(SliderValueProperty);
set => SetValue(SliderValueProperty, value);
}
public string SliderLabel
{
get=> (string)GetValue(SliderLabelProperty);
set => SetValue(SliderLabelProperty, value);
}
public int SliderMinVal
{
get=> (int)GetValue(SliderMinValProperty);
set=> SetValue(SliderMinValProperty, value);
}
public int SliderMaxVal
{
get=> (int)GetValue(SliderMaxValProperty);
set=> SetValue(SliderMaxValProperty, value);
}
public LabeledSlider()
{
InitializeComponent();
}
}
}
Die Implementierung im MainWindow hat eine kleine Unwegbarkeit zutage gefördert.
<Window.DataContext>
<local:MainViewModel x:Name="vm"/>
</Window.DataContext>
<local:LabeledSlider x:Name="ucSlider" SliderMinVal="{Binding MinVal, ElementName=vm}"
SliderMaxVal="{Binding MaxVal, ElementName=vm}"
SliderLabel="So heisst die Minna"
SliderValue="{Binding SetVal, ElementName=vm}"/>
Die Bindingengine kam wohl bei den Bindings etwas durcheinander. Danach habe ich testweise mal dir Values mit dem Elementnamen des Viewmodels verknüft und et voilá schon lief die Minna.
Anbei ein Screenshot von meinem kleinen TestWindow.
Danke Jungs! Ihr seid die Größten. Ich wink Euch aus dem Ally Pally zu am Freitag 😉
Hey Abt!!
Dir ist hoffentlich schon klar, daß Du NICHT der zweitbeste bist? 😘
Wie immer superschnelle Antwort und die noch mit der Präzision eines Scharfschützen. Ganz herzlichen Dank dafür.
Der Fehler sollte sich eigentlich sehr gut googlen lassen, da er sehr häufig auftritt - und soweit ich weiß nichts mit einem User Control zutun hat, sondern mit einem PropertyBinding.
Gegooglet habe ich natürlich, wurde aber aus den Antworten nicht schlau.
Nachdem ich mich in die Thematik DependencyProperty eingelesen habe, sieht das dann so aus:
public static readonly DependencyProperty SliderValueProperty =
DependencyProperty.Register("SliderValue", typeof(int),
typeof(LabeldSlider), new FrameworkPropertyMetadata(default(int),
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public int SliderValue
{
get => (int)GetValue(SliderValueProperty);
set => SetValue(SliderValueProperty, value);
}
Die Fehlermeldung ist weg, die gewünschte Funktionalität aber noch nicht da. Möchte heißen, daß der Slider weder auf den gewünschten Wert springt, noch daß die Minimum und Maximum - Werte hier wirklich zum tragen kommen. Momentan rührt sich das Ding noch nichtmal 😉. Aber hier bastele ich mal weiter. Da kommt Opi schon noch dahinter.
Hallo liebe Forenmitglieder,
ich habe mir ein kleines UserControl gebaut, welches zwei Labels und einen Slider beinhaltet. Diesem habe ich vier Properties verpasst
public partial class LabeldSlider : UserControl
{
private string textContent;
private int minVal;
private int maxval;
private int setval;
public string TextContent
{
get { return textContent; }
set { textContent = value; }
}
public int MinVal
{
get { return minVal; }
set { minVal = value; }
}
public int MaxVal
{
get { return maxval; }
set { maxval = value; }
}
public int SetVal
{
get { return setval; }
set { setval = value; }
}
public LabeldSlider()
{
InitializeComponent();
}
}
Die recht überschaubare XAML hierzu (verschönert wird das Ganze noch, wenn es läuft):
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Label Content="{Binding ElementName=TextContent}" Foreground="White"
Grid.Column="0"/>
<Slider x:Name="Slider" Grid.Column="1"
Maximum="{Binding XPath=MaxVal}"
Minimum="{Binding XPath=MinVal}"
Value="{Binding XPath=SetVal}" SmallChange="1" TickFrequency="0"
LargeChange="0"/>
<Label x:Name="Werte" Grid.Column="2"
Content="{Binding ElementName=Slider, Path=Value}"
Foreground="White"/>
</Grid>
</UserControl>
Jetzt wollte ich das ganze Ding in eine Page integrieren und stoße jetzt beim Binding auf einen interessanten Fehler: > Fehlermeldung:
Object of type 'System.Windows.Data.Binding' cannot be converted to type 'System.int32'
Der Fehler tritt aber nur bei der Parametrierung einer bestimmten Property auf, nämich der "SetVal"
<theme:LabeldSlider x:Name="CricketScore"
TextContent="Cricket StartScore" Grid.Row="1"
MaxVal="1000" MinVal="0"
SetVal="{Binding CStartScore}">
</theme:LabeldSlider>
Meine Vermutung ist, daß die von mir vergebenen Properties wohl nicht ganz den erforderlichen Vorgaben entsprechen. Könnte da mal jemand drüberschauen?
Ein "Leg" im Dart ist ein "Durchgang". Also ein Spiel zB 501.
Mehrere Legs ergeben ein Set.
Ein oder mehrere Sets ergeben ein Match (zB zwischen zwei Personen).){gray}
Leider gibt es auf der Profi - Tour nur zwei Turniere, die im Set - Modus gespielt werden. Den World Grand Prix und die bald anstehende Weltmeisterschaft, zu der ich am nächsten Mittwoch aufbreche. Leider nur als Zuschauer / Unterstützer meines Freundes, der bei der diesjährigen Ausgabe wieder mitspielt.
Edit: Dafür habe ich jetzt meinen 4500. Beitrag hier geschrieben, juhu!
Lass Dir dazu von mir herzlich gratulieren.